tornado websocket

近期在网上找了些websocket的资料看了下。node和tornado等等本身已经实现了websocket的封装,所以使用起来会比較简单,php假设想要写websocket还须要自己跑一整套流程,比較麻烦。

依据网上的资料写了一个简单的websocket的demo,果真炫酷掉渣天,我是用tornado,网上多是实现实时聊天室的样例,想要实现点对点的聊天功能还须要在send函数那里加条件,目測是依据浏览器用户的id去推断的。代码例如以下:

服务端代码:

#!/usr/bin/python
#coding:utf-8
import os.path

import tornado.httpserver
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpclient
import tornado.websocket

import json
class IndexHandler(tornado.web.RequestHandler):
	def get(self):
		self.render("index.html")

class SocketHandler(tornado.websocket.WebSocketHandler):
	"""docstring for SocketHandler"""
	clients = set()

	@staticmethod
	def send_to_all(message):
	    for c in SocketHandler.clients:
	        c.write_message(json.dumps(message))

	def open(self):
	    self.write_message(json.dumps({
	        ‘type‘: ‘sys‘,
	        ‘message‘: ‘Welcome to WebSocket‘,
	    }))
	    SocketHandler.send_to_all({
	        ‘type‘: ‘sys‘,
	        ‘message‘: str(id(self)) + ‘ has joined‘,
	    })
	    SocketHandler.clients.add(self)

	def on_close(self):
	    SocketHandler.clients.remove(self)
	    SocketHandler.send_to_all({
	        ‘type‘: ‘sys‘,
	        ‘message‘: str(id(self)) + ‘ has left‘,
	    })

	def on_message(self, message):
		SocketHandler.send_to_all({
            ‘type‘: ‘user‘,
            ‘id‘: id(self),
            ‘message‘: message,
        })

##MAIN
if __name__ == ‘__main__‘:
	app = tornado.web.Application(
		handlers=[
			(r"/", IndexHandler),
			(r"/chat", SocketHandler)
		],
		debug = True,
		template_path = os.path.join(os.path.dirname(__file__), "templates"),
        static_path = os.path.join(os.path.dirname(__file__), "static")
	)
	app.listen(8000)
	tornado.ioloop.IOLoop.instance().start()

client代码:

<html>
<head>
<script type="text/javascript">
var ws = new WebSocket("ws://localhost:8000/chat");
ws.onmessage = function(event) {
	console.log(event);
}
function send() {
	ws.send(document.getElementById(‘chat‘).value );
}
</script>
</head>

<body>
	<div>
		hello
		<input id="chat">
		<button  onclick="send()">send</button>
	</div>
</body>
</html>
时间: 2024-10-13 22:25:33

tornado websocket的相关文章

nginx,tornado,websocket,supervisord配置成型

因为要上生产环境,所以配置还是专业一些比较好. nginx.conf upstream websocket_host { server 127.0.0.1:9527; } location /ws_log { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $

tornado+websocket+mongodb实现在线视屏文字聊天

最近学了tornado和mongo,所以结合websocket 实现一个聊天功能,从而加深一下相关知识点的印象 1.websocket概览 webscoket是一种全双工通信模式的协议,客户端连接服务端先通过tcp,http转为webscoket协议后,客户端和服务端都可以主动推送消息给另一端,这也是和http协议(服务端只能被动接收消息,无法主动推送消息给客户端)最大的区别. 2.tornado概览 tornado是一种异步网络库的python web框架,最初在 FriendFeed上开发,

用tornado实现websocket

import tornado.web import tornado.websocket import tornado.httpserver import tornado.ioloop import tornado.options from uuid import uuid4 class ShoppingCart(object): totalInventory = 10 callbacks = [] carts = {} def register(self, callback): self.cal

Tornado-第三篇-tornado支持websocket协议

manage.py from tornado.ioloop import IOLoop from tornado.web import RequestHandler from tornado.websocket import WebSocketHandler from tornado.web import Application CLIENT_LIST = [] class MsgHandler(WebSocketHandler): def open(self): CLIENT_LIST.app

基于Tornado的websocket实现聊天室

self.render-string() 渲染成字符串 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ border: 2px solid #dddddd; height: 400px; overflow: auto; } &

web新特性 之 WebSocket

详情参见:你真的了解WebSocket吗?     WebSocket系列教程   HTML5新特性之WebSocket WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex)通信.其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信. 服务端与客户端的连接不断开,实现全双工的操作.及服务端或是客户端都会给对方发送消息. WebSocke

tornado学习精要

最简单的应用在程序的最顶部,我们导入了一些Tornado模块.虽然Tornado还有另外一些有用的模块,但在这个例子中我们必须至少包含这四个模块. 12341234包括了一个有用的模块(tornado.options)来从命令行中读取设置.我们在这里使用这个模块指定我们的应用监听HTTP请求的端口. 1212工作流程:如果一个与define语句中同名的设置在命令行中被给出,那么它将成为全局options的一个属性. 如果用户运行程序时使用了–help选项,程序将打印出所有你定义的选项以及你在de

Tornado模块分类和各模块之间的关系

1. Core web framework tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类 tornado.httpserver — 一个无阻塞HTTP服务器的实现 tornado.template — 模版系统 tornado.escape — HTML,JSON,URLs等的编码解码和一些字符串操作 tornado.locale — 国际化支持 2. Asynchronous networking 底层模块 t

给skynet增加websocket模块

最近迷上了skynet,代码质量很高,算开源游戏服务器框架中的佼佼者,不管是Python的firefly,C++/Python的kbengine,C#的scut,还是nodejs的pomelo,skynet在并发上和商业应用都有很大的优势,根据http://thislinux.com/blog/5_panic.html描述,skynet能支持单机3w在线用户,性能很是给力. 最近做的都是一些h5小游戏,用tornado/django基本上也都绰绰有余,下个小游戏打算试试skynet,skynet