2016-06-26 4 views
-1

あいまいな質問に対する謝罪 - 私は実際にこれが働かなくなった私が何を変えたのか分かりません。後にwebsocket.recv()でハングアップしますか?

私はWebSocketを使用してPythonでテキストアドベンチャーエンジン(オープンソースプロジェクト)に取り組んでいます。 これはasyncioとwebsocketsモジュールでうまくいきました。私は物事を少し動かし、今入力を受け取ったときにハングアップします。

私は嘘をついた - それは決して働かなかった。このコードは、しかし、作業を行います。

#!/usr/bin/python3 

import asyncio 
import websockets 
import time 

async def hello(websocket, path): 
    while True: 
     name = await websocket.recv() 
     print("< {}".format(name)) 

     greeting = ''.join(name + "... " for x in range(5)) 
     await websocket.send(greeting) 
     print("> {}".format(greeting)) 

     time.sleep(0.1); 

start_server = websockets.serve(hello, '', 26231) 

asyncio.get_event_loop().run_until_complete(start_server) 
asyncio.get_event_loop().run_forever() 

私のコード(動作しないコード)は、それぞれのGitHubのレポで提供されています:

https://github.com/KernelDeimos/mmota-server/issues/1

その後、私は「時間があるとき私のクライアント用のリポジトリを追加し、ここでもリンクしていますが、それは非常に基本的です(作業コミットと壊れたクライアントの間でクライアントに変更はありません)。

クライアントは、ローカルホストに接続します。26231と私は入力したメッセージを送信する(例:「エコー」を)

サーバーはメッセージを送り返す - あるいは少なくとも、それがになっています。

残念ながら、サーバはserver.pyのこの行にハング:

data = await self.websocket.recv() 

と次の行に印刷が実行されることはありません。

+2

[クロスポスト]しないでください(http://meta.stackexchange.com/tags/cross-posting/info):http://programmers.stackexchange.com/q/323276 –

+0

私の投稿を削除しましたプログラマーStackExchange。 downvoteを元に戻すほど優しいですか? –

答えて

0

websocketsパッケージを使用することに決めていない場合は、Autobahn Pythonを試してみることをおすすめします。私はあなたがウェブソケットを使い始めたばかりの方が使いやすいと信じています。

完全エコーサーバーの例がhereにあります。

+0

私は行って、アウトバーンを実装しました - それはこれまで有望そうです!私は2つのコルーチンに分割したい点にまだ達していませんが(私が言及したコミットのコードのように)、私はこの方法でずっと簡単になると思います –

関連する問題