这是我的问题:
我有服务器 A,运行 node.js 并使用 socket.io 与客户端(Web 浏览器)通信。这一切都运行良好,花花公子。
但是,现在我有服务器 B,它也需要通过 websockets 连接到服务器 A,我碰壁了。我发现的所有 node.js websocket 客户端都不能与服务器 A 上的 socket.io 一起使用。
所以,这就是我正在努力的情况:
.--------. .----------. .----------.
| CLIENT | <--> | SERVER A | <--> | SERVER B |
'--------' '----------' '----------'
客户端-服务器通过socket.io完成连接
现在,服务器 B(运行 node.js)应该通过 websocket 连接到服务器 A(为了通过端口 80)。但...
甚至 socket.io-client 模块中的示例代码也不起作用...:/
// Connect to server
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected.');
});
代码只是通过而没有任何错误,几秒钟后执行结束。
更新:代码示例
服务器(工作得很好)看起来像这样:
// Load requirements
var http = require('http'),
io = require('socket.io');
// Create server & socket
var server = http.createServer(function(req, res){
// Send HTML headers and message
res.writeHead(404, {'Content-Type': 'text/html'});
res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);
// Add a connect listener
io.sockets.on('connection', function(socket) {
console.log('Client connected.');
// Disconnect listener
socket.on('disconnect', function() {
console.log('Client disconnected.');
});
});
客户端看起来像这样
console.log('1');
// Connect to server
var io = require('socket.io-client')
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();
console.log('2');
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected!');
});
console.log('3');
1、2 和 3 打印得很好,没有错误,几秒钟后进程就退出了
此外,服务器 A 不会向日志输出任何内容,即使我在“一切”上设置了 socket.io 日志记录。
the node.js websocket clients I've found
哪些?
对于未来的人:
这里有 2 个非常简单的 Node.js
应用程序,它们使用 socket.io 在彼此之间连接、发送和接收消息。
需要的包是:
npm install socket.io
Node-App-1 server.js:
var io = require('socket.io').listen(3000);
io.on('connection', function (socket) {
console.log('connected:', socket.client.id);
socket.on('serverEvent', function (data) {
console.log('new message from client:', data);
});
setInterval(function () {
socket.emit('clientEvent', Math.random());
console.log('message sent to the clients');
}, 3000);
});
Node-App-2 client.js:
var io = require('socket.io-client');
var socket = io.connect("http://localhost:3000/", {
reconnection: true
});
socket.on('connect', function () {
console.log('connected to localhost:3000');
socket.on('clientEvent', function (data) {
console.log('message from the server:', data);
socket.emit('serverEvent', "thanks server! for sending '" + data + "'");
});
});
事实证明,出于某种原因,我使用的是旧示例,即使我对它们进行了三次检查。嗯,呵呵。
此外,事实证明 socket.io-client 在最新的 Node (6.xx) 上已损坏。设法从 github 找到更新,替换文件,是的,一切正常!
编辑:不幸的是,我没有保存任何指向工作示例的链接,但在快速浏览代码后,似乎唯一的更改是客户端代码,现在看起来像这样:
console.log('1');
// Connect to server
var io = require('socket.io-client')
var socket = io.connect('localhost:8080', {reconnect: true});
console.log('2');
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected!');
});
console.log('3');
这是我编写的一段代码,它使用的是 socket.io 1.0.6 和 socket.io-client 1.0.6。案例如下:
服务器 A(Socket.io 客户端)<---> 服务器 B(Socket.io 服务器)
服务器 B(服务器):
// Load requirements
var http = require('http'),
io = require('socket.io');
// Create server & socket
var server = http.createServer(function(req, res)
{
// Send HTML headers and message
res.writeHead(404, {'Content-Type': 'text/html'});
res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);
// Add a connect listener
io.sockets.on('connection', function(socket)
{
console.log('Client connected.');
// Disconnect listener
socket.on('disconnect', function() {
console.log('Client disconnected.');
});
});
服务器 A(客户端):
console.log('1');
// Connect to server
var io = require('socket.io-client');
var socket = io.connect('http://localhost:8080', {reconnect: true});
console.log('2');
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected!');
});
console.log('3');
如果我只在客户端服务器上使用 localhost:8080 它就不会连接。