4

私は竜巻のWebSocketを使用して、ページ上のいくつかの情報を更新しています。ユーザーが画面上の何かを変更した場合、それらの変更をアクティブな接続を持つ他のすべてのユーザーに表示したいと思います。javascriptを取得してサーバーにメッセージを送信することはできますが、そのメッセージをクライアントに送り返す方法がわかりません。これがjavascriptとpythonです

$(document).ready(function () {
    var ws = new WebSocket("company website, I know this works");

    ws.onopen = function () {
        console.log("websocket engage");
    };

    ws.onmessage = $(".column li").on("mouseup", function (evt) {
        pid = $(this).attr("id");
        oldCid = $(this).parent().parent().attr("id");
        newCid = $(this).parent().attr("id");
        message = pid + " " + oldCid + " " + newCid;
        ws.send(message);
    });

    ws.onclose = function (evt) {
        console.log("connection closed");
    };

    ws.writemessage = function (evt) {
        alert(evt.data);
    };

});

これがPythonコードです:

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

from tornado.options import define, options

define("port", default=8888, help="run on the given port", type=int)

change = "original"

listeners = []

class WSHandler(tornado.websocket.WebSocketHandler):
  def open(self):
    print "opened a new websocket"
    listeners.append(self)
    print listeners

  def on_message(self, message):
     #self.write_message(u"You Said: " + message)
     print ("in on_message " + message)
     change = message
     #self.write_message(message)

  def on_close(self):
    print 'connection closed'
    listeners.remove(self)

  def write_message(self, message):
    print ("in write message " + change)
    self.write_message(change)

def main():
    #tornado.options.parse_command_line()
    application = tornado.web.Application([
(r'/ws', WSHandler),
 ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()
4

2 に答える 2

4

Python コードでは、クラスにマップ/wsしましWSHandlerたが、WebSocket オブジェクトを作成するときに、javascript コードでこれを行う必要があります。

1)

var ws=new WebSocket("ws://192.168.3.33:8888/ws"); 
/* 
  if 192.168.3.33 is the server IP and 8888 is the port, the server is serving on. 
  So object is mapped to r"/ws". so now the server can identify the request 
*/

それ以外の :

var ws = new WebSocket("company website, I know this works");

2) onmessage()WebSocket のイベントは、サーバーが何かを送り返すときに発生します。

したがって、JavaScript コードは次のようになります。

$(document).ready(function () {
var ws=new WebSocket("ws://192.168.3.33:8888/ws");

ws.onopen = function () {
    console.log("websocket engage");
};

ws.onmessage = function(evt){
    //the received content is in evt.data, set it where you want
};

ws.onclose = function () {
    console.log("connection closed");
 };

$(".column li").on("mouseup")  //the function  that sends data
{
    pid = $(this).attr("id");
    oldCid = $(this).parent().parent().attr("id");
    newCid = $(this).parent().attr("id");
    message = pid + " " + oldCid + " " + newCid;
    ws.send(message);   
};
});
于 2012-05-10T22:29:10.933 に答える
3

再定義:

  def on_message(self, message):
     print ("in on_message " + message)
     for w in listeners:
        w.write_message(message)

これにより、接続されているすべてのクライアントに「メッセージ」が送信されます。

さらに、自分のバージョンの self.write_message を削除することをお勧めします。

于 2013-08-31T20:58:36.930 に答える