我是新來的node.js和socket.io,並且不知道協議是如何工作的。但我正在學習。
我得到socket.io初學者問題,如果我從喜歡一些教程拿到代碼:
var http = require('http');
var fs = require('fs');
var app = http.createServer(
function(request, response){
console.log("New Connection!");
fs.readFile(
"client.html","utf-8",
function(err, data){
response.writeHead(200, {'Content-Type':'text/html'});
response.write(data);
response.end();
}
);
}
).listen(1337);
var io = require('socket.io').listen(app);
io.sockets.on(
'connection',
function(socket){
socket.on(
'message_to_server',
function(data){
io.sockets.emit('message_to_client',{message: data['message']});
}
);
}
);
我的問題是能有人告訴我這個代碼是如何工作的?我感到困惑的是:
它看起來像socket.io只是包裝應用程序,發送和接收事件消息和做回調。但我想知道爲什麼這些行動不會觸發應用程序的請求事件,我把console.log(「新連接!」);在回調中,它只會在我輸入服務器地址並在瀏覽器中按回車時顯示,但是當我按下發送按鈕時,它不會顯示任何內容?
這裏是我的客戶端代碼:
<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
// Out client code here.
var socketio = io.connect("192.168.1.150:1337");
socketio.on(
'message_to_client',
function(data){
document.getElementById("chatlog")
.innerHTML=
("<hr/>"+data['message']+document.getElementById("chatlog").innerHTML);
}
);
function sendMessage(){
var msg = document.getElementById("message_input").value;
if(msg!=""){
socketio.emit("message_to_server", {message:msg});
}
}
</script>
</head>
<body>
<input type="text" id="message_input" />
<button onclick="sendMessage()">SEND</button>
<div id="chatlog"></div>
</body>
</html>
Thanks user568109! – Kuan
我試過io.connect(「」)。當我在該文本輸入框中輸入一些字符串並按發送時,服務器端僅打印信息信息,但它不打印出新的連接!只有當我刷新頁面或按下地址欄中的輸入時,服務器纔可以打印新建連接?我想知道:是否因爲websocket請求無法觸發應用httpserver的請求功能? – Kuan
看來客戶端無法連接打開websocket連接。我可以在本地機器上運行你的代碼。你在哪裏部署你的服務器? – user568109