2

Windows プラットフォームでソケットが閉じる理由がわかりません。

次の単純なサーバーは、私の Linux ボックス (chrome と firefox) で動作しますが、「ソケットが閉じられました」というメッセージが表示される Windows ボックスや Android フォンでは動作しません。このチャット デモは、私が試したすべてのプラットフォームで動作します。アドバイスをありがとう。

ジャスティン

---- サーバーコード:------

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import time


class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("Hello World")
        for i in range(3):
            self.write_message('Testing %d' % i)
            i += 1
            time.sleep(1)
        self.close()      
    def on_message(self, message):
        print 'message received %s' % message

    def on_close(self):
      print 'connection closed'

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("logdemo.html")

application = tornado.web.Application([
        (r'/', MainHandler),
        (r'/ws', WSHandler),
])


if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    print 'serving on port 8888'
    tornado.ioloop.IOLoop.instance().start()

---- logdemo.html ----

<!doctype html>
<html>
  <head>
    <script src="http://code.jquery.com/jquery.min.js"></script>
    <script>
      function log(m) {
        d = document.getElementById("log");
        d.innerHTML = m + "<br/>" + d.innerHTML;
      }
      $(document).ready(function () {
      var ws = new WebSocket("ws://raspberrypi.local:8888/ws");

      ws.onopen = function(evt) { log("socket opened"); };
      ws.onmessage = function(evt) { log("message: " + evt.data); ws.send("GOTIT");};
      ws.onclose = function(evt) { log("socket closed"); };
      });
     </script>
  </head>
  <body>
    <h1>Websockets Streaming</h1>
    <div id="log"></div>
  </body>
</html>
4

1 に答える 1

1

WSHandler の open メソッドで self.close() を呼び出しています。これが理由だと思いますね。

于 2014-09-21T16:49:04.613 に答える