全部:
我是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']});
}
);
}
);
Run Code Online (Sandbox Code Playgroud)
我的问题是有人可以告诉我这段代码是如何工作的吗?我感到困惑的是:
看起来socket.io只是包装了应用程序,发送和接收事件消息并进行回调。但我想知道为什么这些操作不会触发应用程序的请求事件,我把 console.log("New Connection!"); 在该回调中,它仅在我输入服务器地址并在浏览器中按 Enter 时显示,但是当我按发送按钮时,它不会显示任何内容?
这是我的客户端代码:
<!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>
Run Code Online (Sandbox Code Playgroud)
在你的代码中app是一个http服务器,并且io是一个websocket服务器。如您所知,http 服务器提供 http 请求,而 websocket 服务器使用 websocket 协议。检查维基百科。
这是做什么的
var app = http.createServer(
function(request, response){
console.log("New Connection!");
Run Code Online (Sandbox Code Playgroud)
它启动一个 http 服务器并在每个 http 请求上执行给定的函数。对于您来说,它会打印New Connection并发送 client.html。
这是做什么的
var io = require('socket.io').listen(app);
Run Code Online (Sandbox Code Playgroud)
它告诉套接字服务器连接到http 服务器。它侦听与 http/https 服务器相同的地址和端口以进行 Websocket 连接。
这是做什么的
var socketio = io.connect("192.168.1.150:1337");
Run Code Online (Sandbox Code Playgroud)
连接到 192.168.1.150:1337 的 websocket 服务器并使用套接字进行通信。你说点击发送后没有任何显示,你使用的地址是否正确?试试这个,它会自动获取地址(正在使用中):
var socketio = io.connect("");
Run Code Online (Sandbox Code Playgroud)