web socket 入门
WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,其优雅地解决了以往web服务器不能向web客户端实时推送消息的问题。
在浏览器js环境中,创建一个websocket对象如下所示:
var ws = New WebSocket(url, [protocol])
第一个参数 url, 指定连接的 URL,一般web服务器会对这个url进行特殊的处理,一般会用实现了websocket协议的handler处理websocket请求。
第二个参数 protocol 是可选的,指定了可接受的子协议。
WebSocket事件
websocket提供了四个回调函数,分别用来处理open,close,message,error四个事件,即ws.onopen,ws.onclose,ws.onmessage,ws.onerror
举个栗子:
var ws_req = {
socket: null,
start: function() {
var Is_Flash_running = false;
var total_fail_count = 0;
if ("WebSocket" in window) {
var url = "ws://" + location.host + "/socket_req";
if (ws_req.socket){
ws_req.socket.close();
}
ws_req.socket = new WebSocket(url);
ws_req.socket.onopen = function() {
console.log("Opening a connection...");
ws_req.socket.send("connect to web server......")
};
ws_req.socket.onclose = function(evt) {
console.log("I'm sorry. Bye!");
};
ws_req.socket.onerror = function(evt) {
console.log("ERR: " + evt.data);
};
ws_req.socket.onmessage = function(event) {
try {
handleMessage(event.data);
} catch (err) {
console.log(err);
}
}
} else {
alert('你的浏览器太落伍了,换用高版本的chrome内核浏览器吧!!!');
}
},
}
ws_req.start();
var handleMessage = function(data){
//
}
web服务器实现:
笔者使用的后端开发语言是python,用的是Tornado web框架,tornado.websocket已经封装了websocket的协议,我们仅需简单的调用即可
import tornado.web
import tornado.websocket
import traceback from device_serial_load import DevSerialLoadHandler class LoadDevSerialSocketHandler(tornado.websocket.WebSocketHandler):
client = set() def get_compression_options(self):
# Non-None enables compression with default options.
return {} def open(self):
LoadDevSerialSocketHandler.client.add(self) def on_close(self):
LoadDevSerialSocketHandler.client.remove(self)
try:
self.dslhler.dev_serial_load_client.stop()
except Exception, e:
logger.info('close socket client') def send_msg_to_broswer(self, msg):
try:
self.write_message(msg)
return True
except:
logger.error(str(msg) + '发送失败')
self.close()
return False def on_message(self, message):
message_json = json.loads(message)
if "NodeID" in message_json and "LineNum" in message_json :
node_ip = TestNodeData().get_node_ip(message_json["NodeID"])
line_num = message_json["LineNum"][2]
self.dslhler = DevSerialLoadHandler(node_ip, line_num, self.send_msg_to_broswer)
self.dslhler.start()
elif "InputMessage" in message_json:
try:
if message_json["InputMessage"] == "None":
# 支持网页仅回车键的发送
self.dslhler.dev_serial_load_client.client.send(" ")
else:
self.dslhler.dev_serial_load_client.client.send(message_json["InputMessage"])
except Exception, e:
logger.error(e)
logger.error(traceback.format_exc())
logger.error("send input message to dev serial fail")
self.send_msg_to_broswer("<span style='color:red;font-size:20px'>ATCServer:[串口命令发送失败]</span>\r\n")
上诉代码将串口打印通过websocket实时的传输到web页面显示
web socket 入门的更多相关文章
- java WEB开发入门
WEB开发入门 1 进入web JAVASE:标准- standard JAVA桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 web 2 软件结构 C/S :client ...
- Node.js + Web Socket 打造即时聊天程序嗨聊
前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
- Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑
脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- web socket (记录下来方便观看)
Web Sockets HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力. 浏览器通过 JavaScript ...
- HTML5:web socket 和 web worker
a:hover { cursor: pointer } 做练习遇到了一个选择题,是关于web worker的,问web worker会不会影响页面性能?补习功课之后,答案是不会影响. 查阅了相关资料学 ...
- 转载-Web API 入门
An Introduction to ASP.NET Web API 目前感觉最好的Web API入门教程 HTTP状态码 Web API 强势入门指南 Install Mongodb Getting ...
- web前端入门:一小时学会写页面
一小时学会写页面 作为一个懒癌晚期患者,总是习惯找各种简单的解决问题的方法,也习惯性把问题简单化,所以今天想分享给大家简单的web前端入门方法.既然题目已经定了一个小时那么废话就不多说了,计时开始 1 ...
- 【转】轮询、长轮询、iframe长连接、web socket
引自:http://www.cnblogs.com/AloneSword/p/3517463.html http://www.cnblogs.com/wei2yi/archive/2011/03/23 ...
随机推荐
- Pappus一阶矩公式
- Win7 VS2013环境使用cuda_7.5.18
首先得吐槽下VS2015出来快一年了CUDA居然还不支持,没办法重装系统刚从2013升到2015,还得再装回一个2013用,只为学习CUDA... 然后安装的时候,如果你选择自定义组件安装,注意不要改 ...
- s4-介质访问控制子层-1 MAC子层
数据链路层被分成了两个子层:MAC和LLC MAC子层要解决什么问题? 介质访问控制(Madia Access Control) 数据通信方式 单播(unicast):One - to - One ...
- 微信分享接口 略缩图 php
php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar 提示:如果插件里面的jssdk.php函数 file_get_cont ...
- 鼠标经过,显示悬浮DIV
属牛人的本命佛是虚空藏菩萨.属牛人可佩戴属牛黄玉本命佛来提升财运,黄玉的金黄色代表蒸蒸日上,而“金黄”也就是“黄金”的到(倒)来,象征着富贵与财气,佩戴可以招财招富贵,同时黄玉亦是希望之石,可带来智慧 ...
- IE上如何设置input type=file的光标不闪烁
我们使用文件上传时,时常自定义图标,这时候通常会把input的透明度设置为0,但是在IE上使用时会出现光标闪烁问题 解决办法 css设置font-size为0
- canvas打字效果
运用fillText,写的打字效果. 唯一麻烦的地方是,换行问题, 我是把字符串转化为数组,数组一个单位完成,就换行,继续下一个单位. <!doctype html> <html&g ...
- MFC模块状态(一)
先看一个例子: 1.创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: #define IDD_DLL_DIALOG 2000 ...
- bind研究(一)转载
## 阅读数:6537 最近自学JavaScript,学到bind方法这块儿有些地方不太明白,自己就查了些资料,结合自己的理解写了这篇文章以备后面回顾用...其实应该还是搬砖为主吧. 什么是this对 ...
- POJ3692 Kindergarten
Kindergarten Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6882 Accepted: 3402 Desc ...