python websocket实现消息推送,WebSocket服务器在python中定期发送消息

I have a tornado web server in python:

import tornado.httpserver

import tornado.websocket

import tornado.ioloop

from tornado.ioloop import IOLoop

import tornado.web

import time

import threading

import sys

from datetime import datetime

from datetime import timedelta

def sample():

print 'hiiiii'

threading.Timer(10, sample).start()

class WSHandler(tornado.websocket.WebSocketHandler):

def open(self):

print 'new connection'

def on_message(self, message):

self.write_message(message)

self.msg('hellooooooo')

print message

def msg(self,message):

self.write_message(message)

threading.Timer(10, self.msg('in timer')).start()

print 'in msg'+message

def on_close(self):

print 'connection closed'

application = tornado.web.Application([

(r'/', WSHandler),

])

if __name__ == "__main__":

http_server = tornado.httpserver.HTTPServer(application)

http_server.listen(8888)

interval_ms=120

main_loop=tornado.ioloop.IOLoop.instance()

main_loop.start()

And the client is

function fun(){

alert("in fun()");

var val=document.getElementById("txt");

var ws = new WebSocket("ws://localhost:8888");

ws.onopen = function(evt) { alert("Connection open ...");

ws.send(val.value); };

ws.onmessage = function(evt) {

alert("from server: "+evt.data);

}

ws.onclose = function(evt) {

alert("Connection closed.");

}

}

click

I want to get the message periodically to the client. But when I try this I get this error: RunTimeError :Maximum Recursion Depth Exceeded. Please help me solve this issue. Also, how do we know what are the clients connected to the server?

解决方案

Here's a minimal example using the PeriodicCallback.

import tornado.httpserver

import tornado.websocket

import tornado.ioloop

from tornado.ioloop import PeriodicCallback

import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):

def open(self):

self.callback = PeriodicCallback(self.send_hello, 120)

self.callback.start()

def send_hello(self):

self.write_message('hello')

def on_message(self, message):

pass

def on_close(self):

self.callback.stop()

application = tornado.web.Application([

(r'/', WSHandler),

])

if __name__ == "__main__":

http_server = tornado.httpserver.HTTPServer(application)

http_server.listen(8888)

tornado.ioloop.IOLoop.instance().start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值