我是新来的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