2014-03-29 200 views
1

我想连接两个使用socket.io和socket.io客户端的node.js服务器。在这两种情况下,我都使用v0.9.16。socket.io客户端不连接

就我而言,我将服务器称为STREAM SERVER和ACTIVITY SERVER,其中活动服务器使用socket.io-client模块。

流服务器 - (ON THE服务器中的代码,其作用类似于服务器)

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 - (ON,其作用类似于客户端对服务器的代码)

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页面运行这段代码,我看到在流服务器的输出消息:

<!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

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:: 

所以,它使我认为问题是与我的“ACTIVITY服务器”运行socket.io客户端,但我不明白为什么它根本不工作(没有错误信息等)

+0

尝试使用简单的WS lib连接到SocketIo服务器:http://einaros.github.io/ws/对我很好。它还有一个叫做wscat的漂亮实用程序库。 – jcollum

+0

这是一个低级别的模块。这不需要我实现自己的心跳,断开/重新连接等? –

回答

0

我能够得到它使用以下工作:

使用该命令

npm install git+https://github.com/LearnBoost/socket.io.git 
1)socket.io v 1.0.0预

使用该命令

npm install git+https://github.com/LearnBoost/socket.io-client.git 

3)I 2)使用scoket.io客户端v 1.0.0预来自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)。

当做更多的“乒乓”风格的消息,我每秒能够获得约650条消息。

注意性能数字只是一个数据点供参考,我没有做任何调整,负载加载等。

0

我有同样的问题,但我的解决方案很简单:

我的代码是错在这里:

var serverSocket = ioclient.connect('127.0.0.1:6000'); 

然后我写了 'WS://' 前 '127.0.0.1',并它开始工作。

var serverSocket = ioclient.connect('ws://127.0.0.1:6000'); 

这让我头痛数小时。

相关问题