关于WebSocket4Net.dll 发布覆盖dll文件出错在苹果手机连不上

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)6862人阅读
Java基础知识(19)
这个问题相信不上的网友遇到过,网上给出的解决办法也很多。但还是没能解决。
最后我发现原来根本问题是JDK版本和tomcat版本问题;
前提保证代码没问题
1、最低版本要jdk1.7以上;
2、tomcat要tomca7.0以上,别忘了配置tomcat7.x JDK name 。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
标签:至少1个,最多5个
推送技术通过建立客户端与服务器端间的长连接,使客户端可以接收由服务器端不定时发送的消息。
1 基于 ajax 的轮询方法:
使用 JQuery 封装的 $.ajax 构建轮询方式如下所示,无论请求成功与否均每隔 5s 进行一次询问。
function push_ajax(callback) {
type: "GET",
dataType: "",
success: function(resp) {
callback(resp);
complete: function(resp) {
setTimeout(function() {
push_ajax(callback);
Http 请求是基于 TCP 连接实现的,其过程可以简述为:客户端与服务器建立 TCP 连接,服务器根据客户端提交的报文处理并生成 Html 文本,将 Html 封闭成为 Http 协议报文并返回给客户端,关闭连接。
不难想到,如果把关闭连接环节取消,就可以维持该连接,使得服务器端通过一些操作,可以实时向客户端发送数据,以减少不断建立连接和释放连接造成的开销。
基于 Http 长连接的服务器推送技术,目前主要的实现方式分为三种:即基于长轮询(long-polling)、基于 iframe 以及基于流(htmlfile streaming)。
使用 ajax 长轮询实现 Comet 与传统 ajax 应用的不同之处在于:
服务器端会阻塞请求直到有数据传递或超时才返回。
客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
通过在 Html 页面里嵌入一个隐蔵 iframe 帧,然后将这个隐蔵帧的 src 属性设置成对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。服务器端并不返回直接显示在页面中的数据,而是返回对客户端 Javascript 函数的调用,将返回的数据作为函数的参数传递。
3 Server-Sent:
简单来说,Sever-Sent 就是 Html5 规范下的 Comet,具有更好的统一性。
如果 Web 应用的用户接受应用只有在安装了 Flash 播放器才能正常运行,那么使用 Flash 的 XMLSocket 也是一个可行的方案。
这种方案实现的基础是:Flash 提供了 XMLSocket 类。
JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序,JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信,JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示。
Javascript 与 Flash 的紧密结合,极大增强了客户端的处理能力,从 Flash 播放器 V7.0.19 开始,已经取消了 XMLSocket 的端口必须大于 1023 的限制,Linux 平台也支持 Flash XMLSocket 方案。但此方案的缺点在于:
客户端必须安装 Flash 播放器;
因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙;
因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制;
不过这种方案在一些网络聊天室,网络互动游戏中已得到广泛使用。
5 Java Applet 套接口
在客户端使用 Java Applet,通过 java.net.Socket 或 java.net.DatagramSocket 或 java.net.MulticastSocket 建立与服务器端的套接口连接,从而实现“服务器推”。
这种方案最大的不足在于 Java applet 在收到服务器端返回的信息后,无法通过 JavaScript 去更新 HTML 页面的内容。
6 WebSocket:
WebSocket 的目的就是解决网络传输中的双向通信(客户端要向服务器传送数据,同时服务器也需要实时的向客户端传送信息,聊天系统就是典型的双向通信)的问题。
WebSocket 是一个持久化的协议,其部分实现方式是基于 Http 的(ws 和 wss 的默认端口是 80 和 443)。
socket.io()是比较简单实用的 WebSocket 搭建服务,使用基于 nodejs 的 Express 框架搭建服务器为例,其 bin/www 文件修改如下:
#!/usr/bin/env node
* Module dependencies.
var app = require("../app");
var debug = require("debug")("nv:server");
var server = require("http").createServer(app);
var io = require("socket.io")(server);
* Get port from environment and store in Express.
var port = normalizePort(process.env.PORT || "5000");
app.set("port", port);
* Create HTTP server.
// server = http.createServer(app);
* Listen on provided port, on all network interfaces.
server.listen(port);
server.on("error", onError);
server.on("listening", onListening);
* Normalize a port into a number, string, or false.
function normalizePort (val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
if (port &= 0) {
// port number
* Event listener for HTTP server "error" event.
function onError (error) {
if (error.syscall !== "listen") {
var bind = typeof port === "string"
? "Pipe " + port
: "Port " +
// handle specific listen errors with friendly messages
switch (error.code) {
case "EACCES":
console.error(bind + " requires elevated privileges");
process.exit(1);
case "EADDRINUSE":
console.error(bind + " is already in use");
process.exit(1);
* Event listener for HTTP server "listening" event.
function onListening () {
var addr = server.address();
var bind = typeof addr === "string"
? "pipe " + addr
: "port " + addr.
debug("Listening on " + bind);
* Socket.io.
io.on("connection", function (socket) {
socket.on("disconnect", function () {
socket.on("chat message", function (msg) {
io.emit("chat message", msg);
前端核心代码如下:
function initChart() {
let chartDiv = document.getElementById("chart");
let contentDiv = chartDiv.querySelectorAll(".content")[0];
$(contentDiv).append(`
&div class="whtsurname"&
&h3&What's your name?&/h3&
&input type="text" id="nickname" maxlength="13"&
&div class="wrapper"&
&ul id="messages"&&/ul&
&div class="form"&
&input id="m" autocomplete="off" placeholder="Type here ..." /&
window.socket = io("http://mbs.jacqueline.engineer:5000");
// Unique color
socket.color = colors[parseInt(Math.random() * colors.length)];
socket.on("chat message", function (msg) {
$("#messages").append($(`
&li&&span class="nickname" style="color: ${msg.color};"&${msg.name}&/span&:&${msg.content}&/li&
$("#chart").on("keydown", "#m", function (e) {
if (e.keyCode === 13) {
let $input = $(this);
socket.emit("chat message", {name: socket.nickname, content: $input.val(), color: socket.color});
$input.val("");
即可以实现简易的在线多人聊天功能。
0 收藏&&|&&1
你可能感兴趣的文章
13 收藏,2.1k
3 收藏,362
2 收藏,1.6k
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。网站已改版,请使用新地址访问:
WebSocket4Net--demo WEB(ASP,PHP,...) 266万源代码下载- www.pudn.com
&文件名称: WebSocket4Net--demo& & [
& & & & &&]
&&所属分类:
&&开发工具: C#
&&文件大小: 405 KB
&&上传时间:
&&下载次数: 27
&&提 供 者:
&详细说明:WebSocket4Net的demo代码,简单演示WebSocket在asp.net下的使用-WebSocket4Net demo code, the use of a simple demonstration of WebSocket under asp.net
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Demo\Bin\Fleck.dll&&....\...\Fleck.dll.refresh&&....\...\Fleck.pdb&&....\...\SuperSocket.ClientEngine.Core.dll&&....\...\SuperSocket.ClientEngine.Core.dll.refresh&&....\...\SuperSocket.ClientEngine.Core.pdb&&....\...\SuperSocket.ClientEngine.Protocol.dll&&....\...\SuperSocket.ClientEngine.Protocol.dll.refresh&&....\...\SuperSocket.ClientEngine.Protocol.pdb&&....\...\WebSocket4Net.dll&&....\...\WebSocket4Net.dll.refresh&&....\...\WebSocket4Net.pdb&&....\Lib\Fleck.dll&&....\...\Fleck.pdb&&....\...\SuperSocket.ClientEngine.Core.dll&&....\...\SuperSocket.ClientEngine.Core.pdb&&....\...\SuperSocket.ClientEngine.Protocol.dll&&....\...\SuperSocket.ClientEngine.Protocol.pdb&&....\...\WebSocket4Net.dll&&....\...\WebSocket4Net.pdb&&....\Web.config&&....\...Socket\App_Code\WebSocketServerUtils.cs&&....\.........\Bin\Fleck.dll&&....\.........\...\Fleck.dll.refresh&&....\.........\...\Fleck.pdb&&....\.........\...\SuperSocket.ClientEngine.Core.dll&&....\.........\...\SuperSocket.ClientEngine.Core.dll.refresh&&....\.........\...\SuperSocket.ClientEngine.Core.pdb&&....\.........\...\SuperSocket.ClientEngine.Protocol.dll&&....\.........\...\SuperSocket.ClientEngine.Protocol.dll.refresh&&....\.........\...\SuperSocket.ClientEngine.Protocol.pdb&&....\.........\...\WebSocket4Net.dll&&....\.........\...\WebSocket4Net.dll.refresh&&....\.........\...\WebSocket4Net.pdb&&....\.........\Default.aspx&&....\.........\Default.aspx.cs&&....\.........\Default2.aspx&&....\.........\Default2.aspx.cs&&....\.........\Global.asax&&....\.........\Web.config&&....\.........\App_Code&&....\.........\Bin&&....\Bin&&....\Lib&&....\WebSocket&&Demo
&[]:文件不全
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站266万海量源码库中尽情搜索:
&[] - supersocket服务器发送客户端实列
&[] - 基于WCF的即时通讯源码(IM),BS、CS混合模式。简单调试即可使用。WebSocket - 初入探究 与 实现 - 简书
WebSocket - 初入探究 与 实现
本文为初入研究 Websocket协议,对于真正应用中,各种语言都有实现库,建议采用库,而不是自己实现,本文基于node.js,但其他语言都适用
本文主要简述:
Websocket相关知识
Websocket的协议概要
HTTP 与 Websocket 混合服务器简易demo
为什么要实现一个 HTTP 与 Websocket 混合服务器呢?
因为有个朋友 之前被 他的技术总监 蠢哭了...
他的技术总监让他用php连接其他websocket服务器,原因是:不能在js出现websocket的地址....那时我正在看 RFC6455,于是我就开玩笑的说,实现一个 HTTP+Websocket 服务器吧?
于是,我就顺便写了一个这样的一个demo(顺便实现了聊天室),代码量也从原来简易50行,变成了150行,这个demo纯娱乐学习,实际工作中,最好不要这样写,除非你经过深思熟虑,下面demo中,存在的一些问题,因为是简易实现demo的原因,就不进行更多的扩展了
WebSocket相关知识
WebSocket 简述####
WebSocket 是基于TCP的一个双向传输数据的协议,和HTTP协议一样,是在应用层的.他的出现,是为了解决网页进行 持久双向传输数据 的问题
WebSocket 与 HTTP的关系 与 TCP链接的关系
其实WebSocket 和 HTTP 实际上都是一个TCP链接, WebSocket协议和HTTP协议的作用就是 规定他们用TCP对话的规矩
可以查看 RFC6455 文档,来看version:13具体的协议
HTTP1.1可以查看RFC 2616
WebSocket协议的请求(握手),是和HTTP兼容的,可以理解成是一种"升级",但应答规则不一样了
Websocket协议概要
WebSocket 基本步骤如下:
先进行TCP连接
客户端发送握手
服务器响应握手
握手完毕后,可以相互传输数据
连接结束,发送关闭控制帧并断开TCP
这部分就不详细讲了(TCP连接细节也不细说了),每个语言的都差不多
服务端:监听TCP端口(本文监听80)
客户端:发起TCP连接
由于本文采用浏览器+服务器的形式,所以是由浏览器发起的连接
在TCP连接连接后,客户端发送握手(一段字符串,每个句末为\r\n换行):
//来自 客户端的握手,注释内容,实际上不会出现,
GET /chat HTTP/1.1
//必须,一定要是GET请求,HTTP协议一定要为1.1以上
Host: server.example.com //必须(不知有何实际作用,标示入口,但可伪造)
Upgrade: websocket //必须,值为大小写不敏感的websocket
Connection: Upgrade //必须,值为大小写不敏感的Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== //必须,客户端定义的值,经过了base64编码,用于验证握手
Origin: http://example.com //必须,浏览器都会附上,可伪造
Sec-WebSocket-Protocol: chat, superchat //可选,希望采用的交流协议,按优先级排序
Sec-WebSocket-Version: 13 //必须,websocket的协议版本
Sec-WebSocket-Extensions:x-webkit-deflate-frame //可选,希望采用的扩展协议
由于客户端的握手,是和HTTP的请求是兼容的,所以也适应HTTP请求中的规矩
服务端收到来客户端的握手后,应该响应握手(字符串,每个句末为\r\n换行):
HTTP/1.1 101 Switching Protocols
//必须,只能返回101,否则出错
Upgrade: websocket //必须,值为"websocket"
Connection: Upgrade //必须,值为"Upgrade"
Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo= //必须,客户端请求中的 Sec-WebSocket-Key的值+258EAFA5-E914-47DA-95CA-C5AB0DC85B11,再进行base64
Sec-WebSocket-Protocol: chat, superchat //可选,采用的交流协议
Sec-WebSocket-Extensions:x-webkit-deflate-frame //可选,采用的扩展协议
经过接受客户端的握手,并返回服务端的握手(握手没有错误),则建立了websocket连接了
互相传输时的数据,并不能直接发送,需要按照一定的格式
每次传输数据,都需要构建帧,并整帧传输(注意,整个帧将转成2进制数据,经过tcp连接传输到另外一端)
帧组成: FIN + RSV1 + RSV2 + RSV3 + Opcode + Mask + Payload length + Masking-key + Extension data + Application data
翻译过来就是:
是否结束+三个扩展码(RSV1-3)+操作码+是否有掩码+数据长度+掩码(可有可无)+扩展段(可有可无)+数据
所以,你需要在你发送的数据前面添加以上数据
注意,服务端发送的帧不能有掩码,否则应该报错
FIN: 1bit ,表示是否最后一帧,用于分片
RSV1-3: 各1bit,在扩展协议中指定,否则无效
Opcode:4bit,用来说明这个帧是干什么的用,按照该值区分控制帧和数据帧
Mask:1bit,表示是否有掩码
Payload length:7bit 或者 7+16bit 或者 7+64bit,用于表示数据长度(这个长度是转化为二进制数据的长度),这个长度有点复杂:
①当 要发送的数据的长度 小于126时 占用 7bit,7bit中直接填充数据长度
②当长度少于)时,占用7+16bit,前7bit为126(0x7E,无掩码时),后面16bit为实际长度
③当长度大于等于65536时,占用7+64bit,前7bit为127(0x7F,无掩码时),后面64bit为实际长度
Masking-key:0或32bit,当前面的MASK表示有掩码时,就会加入4个字节的掩码,掩码由发送方定义,用于加密Application data
Extension data: 0bit 或 自定义字节数,扩展协议自己定义的数据,如果没有使用扩展协议,或者扩展协议没有定义,则为0bit
Application data: 要发送的信息,如果Mask为1则内容需要Masking-key来进行掩码处理
Opcode中的值代表着这个帧的作用(0-7:数据帧 8-F:控制帧)
0:后续帧,分片时用到
1:文本帧,说明发过来的数据是文本
2:二进制帧,说明发过来的数据是二进制
3-7:保留的数据帧,暂时无作用
8:关闭帧,说明对面要关闭连接了
9:ping帧,对方ping过来,你就要pong回去→_→
A:pong帧,对方ping过来时,需要返回pong帧回去,以示响应
B-F:保留的控制帧,暂时无作用
帧的结构,就是如上了,当要发送数据的时候,按照以上格式,发送即可
掩码加密与解密
当发送的数据需要掩码加密(解密也一样)的时候,一共有4字节位掩码,规则如下
第i个数据(Application data) 需要和 第 i%4 个掩码做 异或运算,即
//原始数据
var data = new Buffer("我是demo")
//四个字节的掩码
var mask = [0x24,0x48,0xad,0x54]
for(var i = 0;i&data.i++){
data[i] = data[i] ^ mask[i%4];
//data即可变成 加密或解密后的数据
当你没法一个帧就把想要的数据发送完毕,你可以选择数据分片,注意,控制帧不能分片(数据长度也不得超过125)
方法如下 (当只有份2片时,只执行1,3):
发送第一个帧 FIN 为0,Opcode 为响应的数据类型
发送其他分片帧 FIN 为0,Opcode 为0
发送最后一个帧 FIN 为1,Opcode 为0
只有FIN和Opcode需要变化,其他的该怎么写,还是怎么写
当接收到关闭帧这个控制帧后,应该 尽快吧没有发送完毕的数据发送完(例如分片),然后再响应一个关闭帧.
关闭帧内可能会有数据,可以用来说明关闭的理由等等,但是没有规定是人类可读语言,所以不一定是字符串
当接收到ping帧的时候,应该返回一个pong帧,而且,ping帧可能带有数据,那么pong帧也需要带上ping过来的数据并返回
数据传输的基本注意事项,就以上了
连接结束####
当连接不需要继续存在时,就可以结束了
基本流程是:
一端发送一个 关闭帧
另外一端再响应一个关闭帧
完成这三步即可,但是,存在特殊情况
有一端的程序关闭了,TCP连接直接关闭,并没有发送 关闭帧
有一端的程序发送关闭帧以后,马上断开了TCP,另外一端发送关闭帧的时候,报错了
我就被以上的坑坑过,所以要注意一下,当TCP连接出错时,直接当成已经关闭即可
如果 浏览器发送关闭帧,服务器没有响应的话,大概会在30-60秒左右会断开TCP,所以不需要怕发了关闭帧缺没有断开TCP(但如果是自己实现的客户端就要注意了!!!)
经过 TCP连接 → 握手协议 → 数据传输 → 连接结束 就基本走完一个websocket流程了
HTTP 与 Websocket 混合服务器简易demo
看完以上,就基本知道websocket的基本原理了,下面这个demo 是可选看的,但看完以后,或许会加深一点理解,本来想一块一块说明,但是发现很多余,所以直接贴代码了,并补回了一点注释
var i = 0;
//聊天室相关语句
var websocket_pool = new Set();
var history = [];
//工具包函数集合
var Websocket_Http_Util = {
//用来解析头部的函数
getHeaders: function (headerString) {
var header_arr = headerString.split("\r\n");
var headers = {};
for (var i in header_arr) {
var tmp = header_arr[i].split(":");
if (tmp.length & 2)
headers[tmp[0].trim()] = tmp[1].trim();
//这部分是不标准的
var first_line = header_arr[0].split(" ");
headers.method = first_line[0];
headers.path = first_line[1];
//用来把想要发送的数据打包成 数据帧的函数
packMessage: function (message) {
var message_len = Buffer.byteLength(message);
var len = message_len & 65535 ? 10 : (message_len & 125 ? 4 : 2);
var buf = new Buffer(message_len + len);
buf[0] = 0x81;
if (len == 2) {
buf[1] = message_
} else if (len == 4) {
buf[1] = 126;
buf.writeUInt16BE(message_len, 2);
buf[1] = 127;
buf.writeUInt32BE(message_len &&& 32, 2);
buf.writeUInt32BE(message_len & 0xFFFFFFFF, 6);
buf.write(message, len);
//创建TCP服务器
var http_websocket = require('net').createServer(socket =& {
//当有客户端连接成功时,则会执行本函数
//当TCP连接接收到消息时,运行一次下面的函数
socket.once("data", data =& {
//解析头部,这里没有做验证函数,
var headers = Websocket_Http_Util.getHeaders(data.toString());
//这里的验证是否websocket也采用粗略验证,这个是不正规的!
if (headers["Sec-WebSocket-Key"]) {
//websocket
var name = 'socke[' + (i++) + ']';
//用来标记连接名字,无实际作用
var tmpData = new Buffer(0);
//分片数据集合
var tmpType =
//储存分片数据的类型
//给websocket时间做得触发器,会出发data:接受到消息 时间,和 end:关闭连接 事件
var websocketEmitter = new (require('events').EventEmitter)();
//聊天室相关语句
websocket_pool.add(socket);
//握手实现,这里取最简单的
socket.write(
"HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept:" +
require('crypto').createHash('sha1').update(headers["Sec-WebSocket-Key"] + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest('base64') +
"\r\n\r\n"
socket.on("data", data =& {
var index = 2;
var isFinish = data[0] &&& 7 == 1;
var opcode = data[0] & 15;
var len = data[1] & 127;
//分析长度
if (len == 126) {
len = data.readUIntBE(index, index += 2);
} else if (len == 127) {
len = data.readUIntBE(index, index += 8);
//掩码解析并解码
var mask = (data[1] &&& 7 & 0) ? data.slice(index, index += 4) :
if (mask) {
for (var i = i & data. i++) {
data[i] = mask[(i - index) % 4] ^ data[i];
//截获消息
data = data.slice(index);
if (isFinish) {
//消息响应
if (opcode == 8) {
//关闭帧响应
socket.write(new Buffer([0x88, 0x00]));
socket.end();
websocketEmitter.emit("end");
} else if (opcode == 9) {
//ping帧响应
console.log("接受ping,来自:" + name);
socket.write(Buffer.concat([new Buffer([0x8A, data.length]), data]));
} else if (opcode == 0 || opcode == 1 || opcode == 2) {
//数据响应
websocketEmitter.emit("data", Buffer.concat([tmpData, data]));
tmpData = new Buffer(0);
//当分片时,纪录缓存数据
tmpData = Buffer.concat([tmpData, data]);
if (tmpType === null) tmpType =
websocketEmitter.on("data", data =& {
//接受信息
console.log(name, data.toString());
//聊天室相关语句
var message = Websocket_Http_Util.packMessage(name + ":" + data);
for(var s of websocket_pool){
s.write(message);
history.push(name + ":" + data.toString());
if(history.length & 100) history.shift();
websocketEmitter.once("end", () =& {
//连接断开(绑定一次)
console.log(name, "断开连接");
//聊天室相关语句
websocket_pool.delete(socket)
socket.on("end", ()=& {
console.log("socket断开连接");
websocketEmitter.emit("end");
socket.on("error", (err) =& {
websocketEmitter.emit("end");
//HTTP这块做得非常粗略
//直接返回了内容,没有判断他的头部+请求内容
//这里就可以去写更多的代码,去实现好HTTP的实际服务器
console.log("网页访问");
socket.write("HTTP/1.1 200 OK\r\nserver: Meislzhua\r\n\r\n");
socket.write("you get path in:" + headers.path);
for(var message of history){
socket.write(message+"&br&\r\n");
socket.end();
//绑定在80端口
http_websocket.listen(80);
浏览器端,做得好丑,只为了实现功能
&!DOCTYPE html&
&html lang="en"&
&meta charset="UTF-8"&
&title&socket-test&/title&
&script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"&&/script&
#message-box {
max-height: 300
var addMessage = function (message) {
$("#message-box .content").append(message + "&br&")
var ws = new WebSocket("ws://localhost");
ws.onopen = function () {
addMessage("连接服务器成功!")
ws.onclose = function () {
addMessage("与服务器断开连接")
ws.onerror = function(evt) {
addMessage("出错:");
addMessage(JSON.stringify(evt));
ws.onmessage = function(message){
console.log(message);
$("#response-box .content").append(message.data + "&br&")
&input type="text" id="send-text"&
&button id="commit" onclick="ws.send($('#send-text').val());$('#send-text').val('')"&提交&/button&
&div id="message-box"&
&div class="content"&&/div&
&div id="response-box"&
&div class="content"&&/div&
一个喜欢程序的大狗
WebSocket 协议 5~10 节 第 1~4 节在 WebSocket 协议 1~4 节; 5. 使用帧去组织数据 5.1 概览 在 WebSocket 协议中,数据的传输使用一连串的帧。为了使得中间件不至于混淆(比如代理服务器)以及为了第 10.3 节将讨论安全原因...
作者介绍:史燕飞(英文名:Jeri),16年毕业于武汉大学并加入腾讯。目前在腾讯云从事前端开发工作,喜欢研究前端相关技术(如:计算机网络、WebKit内核、React等),也喜欢关注数据挖掘及机器学习等前沿科技。版权归原作者所有,未经作者同意,请勿转载文章来源:腾讯云技术社...
HTML5 拥有许多引人注目的新特性,WebSocket就是其中之一。WebSocket一向有着 “Web 的 TCP ”之称。通常 WebSocket 都是用于Web的,用于构建实时的 Web 应用。它可以在浏览器和服务器之间提供一个基于 TCP 连接的双向通道。 Web...
上篇介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 WebSocket WebSocket协议还很年轻,RFC文档相比HTTP的发布时间也很短,它的诞生是为了创建一种「双向通信」的协议,来作为HTTP协议的一个替代...
WebSocket 协议 此文仅作为 RFC6455 的学习笔记。篇幅太长超过了简书的单篇最大长度,故分为两篇,此篇记录 1~4 节,其余见 WebSocket 协议 5~10 节; 1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用...
孤独是内心的爱得不到满足。寂寞是孤独时没有人的陪伴。 城市的烟火很灿烂,内心的孤独与寂寞却不减丝毫。也许这就是当代人的悲痛。 孤独,所以渴求,寂寞,所以难耐。孤独与寂寞,我选择的是后者。
林夕说:我最记得写梁汉文《七友》的时候,写着写着是哭了出来的。 男不听七友,女不听钟无艳。粤语歌坛两首被载入史册的备胎经典,以历史人物作为歌名的更是凤毛麟角。作为天后级的香港歌手,《钟无艳》被谢安琪干净澄澈的嗓音诠释得潸然泪下。整首歌充盈其间的用两个字可概括:卑微。 你有没...
要有效地进行进度控制,必须对影响进度的因素进行分析,事先或及时采取必要的措施,尽量缩小计划进度与实际进度的偏差,实现对项目的主动控制。软件开发项目中影响进度的因素很多,如人为因素、技术因素、资金因素、环境因素等等。在软件开项目的实施中,人的因素是最重要的因素,技术的因素归根...
天空中洁白的仙鹤请将你的双翅借我我不往远处去飞只到理塘就回
——仓央嘉措《那一天》
昨天的亚丁之行,把大家累的够呛,都发誓再也不会去第二次。有高反比较严重的小伙伴,今天都没缓过来,大早上先去找医院罐氧气,医院8、9点才上班,我们还是等着医院开门罐氧气,这个...
你以为的三毛是什么? 那天,我的乘务员看到我在看三毛的书,便说道:“姐啊,我告诉你三毛的书要少看,看了就想去流浪的”。 我看着她笑了笑,说道:“倘若哪天真可以如愿以偿那也到是件好事了呢”。 看《撒哈拉沙漠》的时候,我也...

我要回帖

更多关于 word 插件 发布 dll 的文章

 

随机推荐