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
    评论
在Flask框架实现服务器,可以使用WebSocket协议来实现WebSocket协议是一种双向通信协议,可以在客户端和服务器之间建立持久连接,实现服务器消息给客户端。 下面是一个简单的Flask应用程序,使用WebSocket协议实现服务器消息给客户端: ```python from flask import Flask, render_template from flask_socketio import SocketIO, emit app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app) @app.route('/') def index(): return render_template('index.html') @socketio.on('connect') def test_connect(): print('Client connected') @socketio.on('disconnect') def test_disconnect(): print('Client disconnected') @socketio.on('message') def handle_message(message): print('received message: ' + message) emit('message', message, broadcast=True) if __name__ == '__main__': socketio.run(app) ``` 在上面的例子,我们使用了Flask-SocketIO扩展来实现WebSocket通信。在Flask应用程序,我们定义了三个回调函数: - `test_connect()`:当客户端连接到服务器时调用。 - `test_disconnect()`:当客户端从服务器断开连接时调用。 - `handle_message()`:当服务器接收到消息时调用。 在`handle_message()`函数,我们使用`emit()`函数将消息广播给所有连接到服务器的客户端。 在客户端,我们可以使用JavaScript代码监听来自服务器消息,并将其显示在页面上: ```javascript var socket = io.connect('http://' + document.domain + ':' + location.port); socket.on('connect', function() { console.log('Connected'); }); socket.on('disconnect', function() { console.log('Disconnected'); }); socket.on('message', function(message) { console.log('Received message: ' + message); }); ``` 在上面的JavaScript代码,我们使用SocketIO客户端库连接到服务器,并监听`connect`、`disconnect`和`message`事件。当服务器发送消息时,我们使用`console.log()`函数将其输出到控制台。 这样,我们就可以在Flask框架实现服务器消息给客户端了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值