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 入门的更多相关文章

  1. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  2. Node.js + Web Socket 打造即时聊天程序嗨聊

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

  3. Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑

    脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...

  4. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  5. web socket (记录下来方便观看)

    Web Sockets HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力. 浏览器通过 JavaScript ...

  6. HTML5:web socket 和 web worker

    a:hover { cursor: pointer } 做练习遇到了一个选择题,是关于web worker的,问web worker会不会影响页面性能?补习功课之后,答案是不会影响. 查阅了相关资料学 ...

  7. 转载-Web API 入门

    An Introduction to ASP.NET Web API 目前感觉最好的Web API入门教程 HTTP状态码 Web API 强势入门指南 Install Mongodb Getting ...

  8. web前端入门:一小时学会写页面

    一小时学会写页面 作为一个懒癌晚期患者,总是习惯找各种简单的解决问题的方法,也习惯性把问题简单化,所以今天想分享给大家简单的web前端入门方法.既然题目已经定了一个小时那么废话就不多说了,计时开始 1 ...

  9. 【转】轮询、长轮询、iframe长连接、web socket

    引自:http://www.cnblogs.com/AloneSword/p/3517463.html http://www.cnblogs.com/wei2yi/archive/2011/03/23 ...

随机推荐

  1. 如何将spring boot项目打包成war包

    一.修改打包形式 在pom.xml里设置 <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring-boot-s ...

  2. 2018.12.22 bzoj3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)

    传送门 题意简述:给出一棵trietrietrie树,每个点表示一个字符,求树上所有路径组成的不同字串数.(叶子数≤20\le 20≤20) 由于有一个神奇的条件,考虑以每一个叶子为树根统计每个点到树 ...

  3. 2018.10.25 bzoj4350: 括号序列再战猪猪侠(区间dp)

    传送门 区间dp好题. 首先我们并不用把右括号拿进来一起dpdpdp,而是直接用左括号来dpdpdp. 然后定义状态fi,jf_{i,j}fi,j​表示区间[l,r][l,r][l,r]的合法方案数. ...

  4. main.cpp

    /*main.cpp * *The starting point of the network simulator *-Include all network header files *-initi ...

  5. centos7 新增ip

    1.进入network-scripts目录:cd /etc/sysconfig/network-scripts/ 2.复制ifcfg-eth0: cp ifcfg-eth0 ifcfg-eth0:0 ...

  6. es6 字符串方法

    1.字符串的新方法  includes() 包含属性 startsWith() 头部开始是否包含 endWith() 字符串是否在尾部   ========三个返回值都为布尔值  第二参数为数字  e ...

  7. vue的过渡和动画

    简单过渡 .fade-enter-active, .fade-leave-active { transition: all .5s; } /*.fade-enter, .fade-leave-to { ...

  8. 学习致用九---centos7.2+vim vundle

    目的,安装vim插件,vundle   Vundle是Vim的插件管理插件 YouCompleteMe 简称 YCM 1.安装vundle: git clone https://github.com/ ...

  9. 好文推荐系列-------(5)js模块化编程

    本文主要来源于阮一峰的<Javascript模块化编程>系列文章整合,原文地址:http://www.ruanyifeng.com/blog/2012/10/javascript_modu ...

  10. python基于pillow库的简单图像处理

    from PIL import Image from PIL import ImageFilter from PIL import ImageEnhance import matplotlib.pyp ...