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. 680. Valid Palindrome II

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  2. idea如何搭建springboot框架

    首先简单介绍下Spring Boot,来自度娘百科:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进 ...

  3. 多项式相关&&生成函数相关&&一些题目(updating...)

    文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...

  4. 含参变量积分-Leibniz法则

    定理3,5参考同济下册. 下面的求导-> 三重积分可以化为累次积分经过过2次累次积分后,三重积分对dt的导数形式就等价于定理3了

  5. CEdit控件[转]

    1.CButton.CEdit等从CWnd继承了重要的功能: 使用CWnd::SetWindowText和CWnd::GetWindowText可以设置和获得窗口或控件上的文本.CWnd::SetFo ...

  6. 第30章:MongoDB-索引--地理信息索引

    ①地理信息索引 地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引.在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标. 范例:定义一个商铺的集合 db.sho ...

  7. 很实用的linux 上的svn安装和svnserver 的重启

    虽然在windows上搭建SVN很简单,但是效能却不高,这当然是和linux相比了.然而在linux上搭建SVN却非常繁琐,所以今天这篇文章就来一步一步教您如何在Centos上搭建SVN 安装 #yu ...

  8. JDBC连接SQL Server数据库

    测试环境 数据库:SQL Server 2008 R2,创建数据库名:TestDemo,表:User,字段如下:   字段 字段 id UName UPass sqljdbc.jar下载地址:依赖的J ...

  9. C#重点内容之:事件(Event)

    一.事件的五个组成部分 事件的五个部分: 事件拥有者(对象) 事件成员(Event ,成员) 事件的响应者(对象) 事件处理器(成员,本质是一个回调方法) 事件订阅——把事件处理器与事件关联在一起 二 ...

  10. C++遍历目录和文件夹

    我们需要一个结构体和几个函数.这些函数和结构体在<io.h>的头文件中,结构体为struct _finddata_t ,函数为_findfirst._findnext和_fineclose ...