3 Star 9 Fork 8

觉远大师 / netty-websocket-client

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

家禾赤橙 websocket-server

Description

家禾赤橙websocket最新相关的例子

登录

/**
 * 登录类型
 * 0.设备登录
 * 1.大屏人员登录
 * 2.工控机登录
 * 3.hbuilder手机客户端登录
 */
private String loginType;

/**
 * 0:代表token登录
 * 1:代表用户名密码登录
 * 2:代表匿名登录
 */
private String loginMethod;

/**
 * token
 */
private String token;

/**
 * 帐户
 */
private String user;

/**
 * 密码
 */
private String pwd;

/**
 * 公司码
 */
private String companyCode;

/**
 * 大屏接收的类型(指出type1~type8这个客户端需要接收的类型)
 */
private String acceptType;

/**
 * 终端类型
 * af:A端前端
 * ab:A端后端
 */
private String endType;

/**
 * 大屏接收的类型(指出type1~type8这个客户端需要接收的类型)
 */
private String acceptType;

0.由于原生态的js并不支持headers的传送方式,只有vue或是其它JS框架才支持headers传参方式,所以登录暂时使用参数传参方式; 原生态不支持headers方式的国外回答:
https://stackoverflow.com/questions/4361173/http-headers-in-websockets-client-api

  1. 举例:大屏人员登录,并且用token方式

let params='?loginType=1&loginMethod=0&companyCode=Com_777&token='+'tkstrXXXXXXXXXX';
var wsServer = 'ws://'+window.location.hostname+':8999/websocket'+params;
var websocket = new WebSocket(wsServer);

  1. 举例:设备人员登录,并且用户名密码方式登录

let params='?loginType=0&loginMethod=1&companyCode=Com_777&user='+'zhangsan'+'&pwd='+'123456';
var wsServer = 'ws://'+window.location.hostname+':8999/websocket'+params;
var websocket = new WebSocket(wsServer);

  1. 举例:大屏人员登录,并且匿名式登录

let params='?loginType=1&loginMethod=2&companyCode=Com_777&user='+'niming';
var wsServer = 'ws://'+window.location.hostname+':8999/websocket'+params;
var websocket = new WebSocket(wsServer);

  1. 举例:工控机登录,并且匿名式登录

let params='?loginType=2&loginMethod=2&companyCode=Com_777&user='+'niming';
var wsServer = 'ws://'+window.location.hostname+':8999/websocket'+params;
var websocket = new WebSocket(wsServer);

  1. 举例:hbuilder手机登录,并且匿名式登录

let params='?loginType=3&loginMethod=2&companyCode=Com_777&user='+'fxl';
var wsServer = 'ws://'+window.location.hostname+':8999/websocket'+params;
var websocket = new WebSocket(wsServer);

Instructions

  1. 服务器与客户端互通消息

所有消息通信格式
{type:123,msg:{}}
type:代表协议种类
msg:代表通信内容,可以是字符串、对象、数组等

-5:代表心跳;
客户端发:{type:-5,msg:"ping"}
服务器回:{type:-5,msg:"pong"}

-1:代表服务器端返回给客户端的一些错误提示;
例如:
客户端登录时使用的token不正确:{type:-1,msg:"token validate fail!"}
客户端2小时没发送数据了,之后超时了:{type:-1,msg:"ALL_IDLE out of the time."}

0:代表成功信息;
登录成功,发送成功,接收成功,各种成功的提示!

1~无穷大:代表自定义的信息
自定义就是客户端与服务器之间任意定义的业务,例如:
{type:2,msg:{}}
{type:3,msg:{mytype:1,message:"test"}}
{type:4,msg:[{a:1},{a:2}]}
...........

技术扫盲

1. 什么是 netty ?

Netty是 *一个异步事件驱动的网络应用程序框架,*用于快速开发可维护的高性能协议服务器和客户端。

官网地址:https://netty.io/

GitHub 地址: https://github.com/netty/netty

直接在springboot上面使用原生态的netty也是不友好的,所以我们需要yeauty

yeauty是一个整合springboot的netty-websocket-spring-boot-starter

官网地址:https://github.com/YeautyYE/netty-websocket-spring-boot-starter

2. 什么是 websocket?

Web Socket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信 (full-duplex)。一开始的握手需要借助HTTP请求完成

Web Socket 复用了 HTTP 的握手通道。具体指的是,客户端通过 HTTP 请求与 Web Socket 服务端协商升级协议。协议升级完成后,后续的数据交换则遵照 Web Socket 的协议。

  1. 客户端:申请协议升级

    首先,客户端发起协议升级请求。可以看到,采用的是标准的HTTP报文格式,且只支持 GET 方法。

    重点请求首部意义如下:

    • Connection: Upgrade:表示要升级协议
    • Upgrade: websocket:表示要升级到 websocket 协议。
    • Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。
    • Sec-WebSocket-Key:与后面服务端响应首部的 Sec-WebSocket-Accept 是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

    注意,上面请求省略了部分非重点请求首部。由于是标准的HTTP请求,类似Host、Origin、Cookie等请求首部会照常发送。在握手阶段,可以通过相关请求首部进行 安全限制、权限校验等。

  2. 服务端:响应协议升级

    服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

    每个 header 都以 rn 结尾,并且最后一行加上一个额外的空行 rn。此外,服务端回应的HTTP状态码只能在握手阶段使用。过了握手阶段后,就只能采用特定的错误码。 注意:javascript原生代码对header不怎么支持(封装的vue.js可能有支持的、java支持)

  3. Sec-WebSocket-Accept 的计算

    Sec-WebSocket-Accept 根据客户端请求首部的Sec-WebSocket-Key计算出来.

    计算公式为:

    1. 将 Sec-WebSocket-Key 跟 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接。
    2. 通过 SHA1 计算出摘要,并转成 base64 字符串。

空文件

简介

提供一个netty版的websocket客户端,可以断线重连接 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/luanxiaodong/netty-websocket-client.git
git@gitee.com:luanxiaodong/netty-websocket-client.git
luanxiaodong
netty-websocket-client
netty-websocket-client
master

搜索帮助