我正在尝试使用socket.io和socket.io-client连接两个node.js服务器。在这两种情况下,我使用的是v0.9.16。
就我而言,我将服务器称为STREAM SERVER和活动服务器使用socket.io-client模块的ACTIVITY SERVER。
STREAM SERVER - (服务器上的代码与服务器相似)
var https = require('https');
var express = require('express');
var socket = require('socket.io');
var securePort = (process.env.LOCAL_HTTPS_PORT || 443);
var sslOptions = //CERTIFICATE
var socketIoConfiguration = //CONFIG VALUES
var app = express();
var server = https.createServer(sslOptions, app);
var io = socket.listen(server, socketIoConfiguration('activityToStream'));
io.sockets.on('connection', function (socket) {
console.log('Activity server connected to stream server.');
});
server.listen(securePort);
ACTIVITY SERVER - (与服务器类似的服务器代码)
var socketClientModule = require('socket.io-client');
var streamConnectionServer = 'https://165.225.144.273:443';
var activityToStreamSocket = socketClientModule.connect(streamConnectionServer);
activityToStreamSocket.on('connect', function(socket){
console.log('Connected to Stream Server');
});
当我运行此代码时,我从任一服务器都收不到任何消息。但是,当我从Chrome中提供的HTML页面运行此代码时,我会看到Stream服务器输出上的消息:
<!DOCTYPE html>
<html>
<head>
<title>
Test
</title>
<script src="https://165.225.144.273/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('https://165.225.144.273');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
</head>
<body>
Hello World
</body>
</html>
当客户在CHROME中运行时,STREAM服务器消息
debug: client authorized
info: handshake authorized UaUDRsA3ZBTgdsiLDCrl
debug: setting request GET /socket.io/1/websocket/UaUDRsA3ZBTgdsiLDCrl
debug: set heartbeat interval for client UaUDRsA3ZBTgdsiLDCrl
debug: client authorized for
debug: websocket writing 1::
所以,这让我觉得问题出在我的&#34; ACTIVITY SERVER&#34;运行socket.io-client,但我无法弄清楚为什么它根本不工作(没有错误消息等)
答案 0 :(得分:3)
使用相同版本的套接字服务器和客户端
答案 1 :(得分:0)
我能够使用以下方法让它工作:
1)使用此命令的socket.io v 1.0.0-pre
npm install git+https://github.com/LearnBoost/socket.io.git
2)scoket.io-client v 1.0.0-pre使用此命令
npm install git+https://github.com/LearnBoost/socket.io-client.git
3)我使用了来自CA的SSL证书而不是自签名,然后我使用了DNS名称而不是IP地址(see this on not using unsigned certificates with Socket.io)
这是我的服务器和客户端(服务器充当客户端)。参考Socket.io-client GitHub page。
服务器代码
var sslOptions = //CERTIFICATE
var app = require('express')(); // Express 3.x
var server = require('https').Server(sslOptions, app);
var io = require('socket.io')(server);
io.on('connection', function(socket) {
console.log('Connection from Activity Server');
for (var i=0; i<100000; i++) {
io.emit('event', i);
}
});
server.listen(443);
客户端代码(作为客户端的服务器)
var now = Date.now();
var socket = require('socket.io-client')('https://example.com:443');
socket.on('connect', function(){
console.log('Connected to Stream Server');
socket.on('event', function(data){
console.log('Ping ' + data);
console.log(now + ' ' + Date.now());
});
});
使用这个Socket.io代码,我每秒能够获得超过13,000条消息。这是在同一数据中心的两台Joyent服务器上完成的(内存256 MB,CPU 0.125和突发,网络速率高达10 Gbit / s)。
当做更多的&#34; Ping Pong&#34;样式消息传递,我每秒能够获得大约650条消息。
请注意,性能数字只是一个参考数据点,我没有进行任何调整,加载负载等。
答案 2 :(得分:0)
我有同样的问题,但我的解决方案很简单:
我的代码在这里错了:
var serverSocket = ioclient.connect('127.0.0.1:6000');
然后我写了&#39; ws://&#39;在&#39; 127.0.0.1&#39;之前,它开始起作用。
var serverSocket = ioclient.connect('ws://127.0.0.1:6000');
这让我头疼了好几个小时。
答案 3 :(得分:0)
我遇到了同样的情况,但我通过切换 socketio-client 版本解决了这个问题。我得到了 socketio 2.3 版。但我得到了 socketio-client 3.1 版。我使用“npm install socket.io-client@2.3”更改了socketio客户端的版本。在我的客户端 js 文件中,我像这样使用 socket.io-client
const io = require('socket.io-client');
const socket = io('ws://localhost:3000',{
});