2012-08-30 61 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

相關問題