2014-03-29 121 views
0

新的Python和WebSockets的,但我想做到以下幾點:當它達到putheaderPython的httplib的WebSocket的升級要求

服務器代碼是用Node.js的

var http = require('http'); 

http.createServer(function (request, response) { 
    console.log(request); 
}).on('upgrade', function(request, socket, head) { 
    console.log('Upgrade request! Woohoo!'); 
    socket.connect(8080, 'localhost', function(data) { 
     console.log('data'); 
    }); 
    socket.write('Socket is open!'); 
}).listen(8888); 

import httplib 
conn = httplib.HTTPConnection('localhost:8888') 

conn.putheader('Connection', 'Upgrade') 
conn.putheader('Upgrade', 'websocket') 
conn.endheaders() 
conn.send('Hello to websocket!') 

崩潰

沒有真正擔心服務器代碼是否正確(如果需要,我會修復它,只要我從我的Python客戶端發送請求),但我想知道如何將連接升級到websocket u唱httplib(如果可能的話)。

回答

0

我不確定,但httplib在異步請求方面有問題。看看框架tornado,他可以使用websocket和異步請求並且非常簡單。

+0

將看看框架來獲得一些指針。 – moesef

0

httplib不會說WebSocket。手動添加升級標題並不奇蹟般地讓它如此。它也同步工作,對於WebSocket而言,這是不可取的。

除了已經提到的Tornado之外,您還可以看看Autobahn,它可以使用Twisted和asyncio作爲底層異步網絡庫。

信息披露:我是Autobahn的原創作者,爲Tavendo工作。

+0

我明白了。我將檢查您提供的項目,但必須詢問是否有方法從HTTPConnection對象創建套接字?或者是httplib和套接字完成單獨的模塊? – moesef

+0

不知道我是否明白你的意思:WebSocket不只是「原始的TCP套接字」。所以,即使你可以在HTTPConnection底層的原始TCP套接字,這也沒有什麼幫助。 – oberstet

+0

我明白了。我可能需要更多地閱讀技術。就像我說的,第一次搞這個東西:P – moesef