2012-08-30 211 views
1

我正在尝试将使用express编写的node.js服务器连接到客户端应用程序(用C++编写,尽管应该没有任何影响) socket.io。使用socket.io将应用程序连接到节点服务器

服务器几乎可以归结为:

var express = require('express'); 
var http = require('http') 

var app = express(); 
var server = http.createServer(app) 
var io = require('socket.io').listen(server); 

app.use(express.cookieParser()); 
app.use(express.session({ 
    ... 
})); 
app.use(app.router); 

// response handling ------- 
app.get('/', function(req, res){ 
    console.log('request get /'); 
}); 

io.sockets.on('connection', function(socket) { 
    console.log('sockets.io connection!'); 
}); 
// ------- 

port = 3000 
app.listen(port); 
console.log('Listening on port: ' + port); 

当我火了这个节点我要做两件事情:

  1. 我尝试用浏览器连接。这意味着它会触发apt.get('/'...),但它不会触发io.sockets.on('connection'...),这是意想不到的,这让我感到怀疑,我误解了一些东西。
  2. 我启动我的C++应用程序并调用TCP套接字连接。套接字连接并让我发送数据,但我从来没有得到任何迹象表明节点端发生了什么(并且我从来没有收到任何数据)。 io.sockets.on('connection'...)永远不会被触发,并且不会出现有关格式错误的消息的错误。

所以我的问题是:我误解了sockets.io的设置或功能?我如何将我的应用程序连接到此节点服务器?

谢谢!

回答

1

首先,你是否在客户端包含模块特定的socket.io库? 你连接到正确的插座/端点吗?

io.connect('http://localhost'); 

对于本地应用程序,你可以尝试使用已经实施Socket.IO-modules for C++

后者使用Boost。


如果我理解错误,请通过在新的连接试用版上转储内部状态来发布一些调试信息。

+0

你的第二个建议与我正在尝试做的事情是一致的......但是,说实话,我宁愿不要拉升或任何大的事情(不要误会我的意思,在大多数情况下,我爱情提升)。是不是可以使用一个简单的套接字库来建立一个普通的旧的TCP连接并与节点服务器通信? – WestleyArgentum

+0

那么https://github.com/ebshimizu/socket.io-clientpp呢?这应该做到这一点。主要问题是Socket.io的概念。没有“套接字库”。 Socket.io使用WebSockets(主协议)并实现Adobe Flash套接字,JSONP轮询和AJAX长轮询。也就是说,您可以使用专用的WebSocket模块(例如https://github.com/LearnBoost/websocket.io,这将是一种干净的方法),也可以使用全功能的Socket.io客户端框架。但是,如果您喜欢真正快速且功能全面的功能,并且广泛支持平台支持,则应使用Faye。 –

+0

嘿,我想我的误解在于我可以在不使用websocket的情况下创建一个简单的tcp连接。非常感谢您的帮助。 我认为我要向前迈进的方式是制作一个http服务器和一个网络服务器,它们监听不同的端口,然后调用相同的功能(它们每个都需要一些功能)......只是好奇心,你知道这是否是一种常见的方法吗? – WestleyArgentum

相关问题