目录

Laya Socket·概述

Laya.Socket

Laya Socket·运用

环境准备

Laya 客户端


Laya Socket·概述

1、WebSocket 是一种基于 ws 协议的技术,它使得建立双全工连接成为可能,websocket 常见于浏览器中,但是这个协议不受使用平台的限制。

2、关于 webScoket 本文不做过多阐述,可以参考《HTML5 WebSocket》

3、LayaAir 引擎的 laya.net.Socket 是对H5 websocket 的封装,websocket 发送数据的格式一般为二进制和字符串。

4、如果是收发二进制数据,则需要结合 laya.utils.Byte,实际应用中通常使用字符串就足够了。

5、websocket 的连接是异步的,所以一切和后端的交互都要等待 open 事件成功之后,前后端建立了连接通道才可以正常的收发消息。因此实例化 socket 之后必须监听如下四个事件:

Event Summary

close

连接被关闭后调度。

error

出现异常后调度。

message

接收到数据后调度。

open

连接建立成功后调度。

Laya.Socket

Property(属性)
connected : Boolean   [read-only] 表示此 Socket 对象目前是否已连接。
disableInput : Boolean = false   不再缓存服务端发来的数据。
endian : String

主机字节序,是 CPU 存放数据的两种不同顺序,包括小端字节序和大端字节序。 LITTLE_ENDIAN :小端字节序,地址低位存储值的低位,地址高位存储值的高位。 BIG_ENDIAN :大端字节序,地址低位存储值的高位,地址高位存储值的低位。

input : *   [read-only] 缓存的服务端发来的数据。
output : *   [read-only] 表示需要发送至服务端的缓冲区中的数据。
protocols : *

子协议名称。子协议名称字符串,或由多个子协议名称字符串构成的数组。必须在调用 connect 或者 connectByUrl 之前进行赋值,否则无效。 指定后,只有当服务器选择了其中的某个子协议,连接才能建立成功,否则建立失败,派发 Event.ERROR 事件。

Method(方法)

Socket(host:String = null, port:int = 0, byteClass:Class = null)

创建新的 Socket 对象。默认字节序为 Socket.BIG_ENDIAN 。若未指定参数,将创建一个最初处于断开状态的套接字。若指定了有效参数,则尝试连接到指定的主机和端口。 注意:强烈建议使用不带参数的构造函数形式,并添加任意事件侦听器和设置 protocols 等属性,然后使用 host 和 port 参数调用 connect 方法。此顺序将确保所有事件侦听器和其他相关流程工作正常。

cleanSocket():void    清理socket。

close():void   关闭连接。

connect(host:String, port:int):void

连接到指定的主机和端口。 连接成功派发 Event.OPEN 事件;连接失败派发 Event.ERROR 事件;连接被关闭派发 Event.CLOSE 事件;接收到数据派发 Event.MESSAGE 事件; 除了 Event.MESSAGE 事件参数为数据内容,其他事件参数都是原生的 HTML DOM Event 对象。

connectByUrl(url:String):void

连接到指定的服务端 WebSocket URL。 URL 类似 ws://yourdomain:port。 连接成功派发 Event.OPEN 事件;连接失败派发 Event.ERROR 事件;连接被关闭派发 Event.CLOSE 事件;接收到数据派发 Event.MESSAGE 事件; 除了 Event.MESSAGE 事件参数为数据内容,其他事件参数都是原生的 HTML DOM Event 对象。

flush():void   发送缓冲区中的数据到服务器。

send(data:*):void    发送数据到服务器。

Constant(常量)
BIG_ENDIAN : String = bigEndian

[static] 主机字节序,是 CPU 存放数据的两种不同顺序,包括小端字节序和大端字节序。 BIG_ENDIAN :大端字节序,地址低位存储值的高位,地址高位存储值的低位。有时也称之为网络字节序。 LITTLE_ENDIAN :小端字节序,地址低位存储值的低位,地址高位存储值的高位。

LITTLE_ENDIAN : String = littleEndian

[static] 主机字节序,是 CPU 存放数据的两种不同顺序,包括小端字节序和大端字节序。 LITTLE_ENDIAN :小端字节序,地址低位存储值的低位,地址高位存储值的高位。 BIG_ENDIAN :大端字节序,地址低位存储值的高位,地址高位存储值的低位。有时也称之为网络字节序。

Laya Socket·运用

环境准备

下面使用 Java 搭建一个 webSocket 服务器。

package com.wmx.webscoket;import com.wmx.netty.ServerHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;/*** Created by Administrator on 2018/11/28 0028.** @ServerEndpoint :标识此类为 Tomcat 的 websocket 服务终端,/websocket/yy.action 是客户端连接请求的路径* @Component :将本类交由 spring IOC 容器管理*/
@ServerEndpoint(value = "/websocket/yy.action")
@Component
public class ServerEnpoint {private static Logger logger = LoggerFactory.getLogger(ServerEnpoint.class);/*** sessionSet:存储 客户端 连接*/private static final Set<Session> sessionSet = new HashSet<>();/*** 连接成功后自动触发** @param session*/@OnOpenpublic void afterConnectionEstablished(Session session) {/*** session 表示一个连接会话,整个连接会话过程中它都是固定的,每个不同的连接 session 不同* String queryString = session.getQueryString();//获取请求地址中的查询字符串* Map<String, List<String>> parameterMap = session.getRequestParameterMap();//获取请求地址中参数* Map<String, String> stringMap = session.getPathParameters();* URI uri = session.getRequestURI();*/sessionSet.add(session);logger.info("新 ws 客户端加入,session id=" + session.getId() + ",当前客户端格个数为:" + sessionSet.size());/*** session.getBasicRemote().sendText(textMessage);同步发送* session.getAsyncRemote().sendText(textMessage);异步发送*/session.getAsyncRemote().sendText("我是服务器,你连接成功!");}/*** 连接断开后自动触发,连接断开后,应该清除掉 session 集合中的值** @param session*/@OnClosepublic void afterConnectionClosed(Session session) {sessionSet.remove(session);logger.info("ws 客户端断开,session id=" + session.getId() + ",当前客户端格个数为:" + sessionSet.size());}/*** 收到客户端消息后自动触发** @param session* @param textMessage :客户端传来的文本消息*/@OnMessagepublic void handleMessage(Session session, String textMessage) {logger.info("接收到 ws 客户端信息,session id=" + session.getId() + ":" + textMessage);session.getAsyncRemote().sendText("收到 \""+textMessage+"\"");}/*** 消息传输错误后** @param session* @param throwable*/@OnErrorpublic void handleTransportError(Session session, Throwable throwable) {logger.error("与 ws 客户端 session id=" + session.getId() + " 通信错误...");}
}

Laya 客户端

基本通信流程如下:客户端发起连接->连接成功后,服务器发送第一条消息给客户端->接着客户端连发两条消息给服务器->服务器收到客户端消息后进行回发。

    //初始化引擎Laya.init(600,400,Laya.WebGL);var socket = new Laya.Socket();//创建 socket 对象socket.connectByUrl("ws://localhost/yyServer/websocket/yy.action");//建立连接socket.on(Laya.Event.OPEN, this, openHandler);//连接正常打开抛出的事件socket.on(Laya.Event.MESSAGE, this, receiveHandler);//接收到消息抛出的事件socket.on(Laya.Event.CLOSE, this, closeHandler);//socket关闭抛出的事件socket.on(Laya.Event.ERROR, this, errorHandler);//连接出错抛出的事件//与服务器连接成功时触发function openHandler(event){console.log("连接服务器成功.");//往服务器发送数据socket.send("我是客户端 9527.");socket.send("明天请 Joni 一起吃饭 O.");}//接收到服务器数据时触发function receiveHandler(msg){console.log("收到服务器消息:"+msg);}//与服务器连接关闭时触发function closeHandler(e){console.log("与服务器连接断开.");}//与服务器通信错误时触发function errorHandler(e){console.log("与服务器通信错误.");}

这是平时最常见的传输字符串数据的方式,如果传输二进制数据,详情可以参考官网:https://ldc.layabox.com/doc/?nav=zh-js-1-6-1

LayaAir WebSocket 通信相关推荐

  1. Python3+WebSockets实现WebSocket通信

    一.说明 1.1 背景说明 前端时间同事说云平台通信使用了一个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层 ...

  2. C#(SuperWebSocket)与websocket通信

    原文:C#(SuperWebSocket)与websocket通信 客户端代码 点击可以查看一些关于websocket的介绍 1 <!DOCTYPE html> 2 <html> ...

  3. WebSocket 通信原理和详细使用(十六)

    今天我们详细分析WebSocket 通信原理和使用 一.什么是 WebSocket ? WebSocket --一种在 2011 年被互联网工程任务组( IETF )标准化的协议.WebSocket ...

  4. 《 Socket.IO》 解决 WebSocket 通信

    大家好呀,我是小菜~ 本文主要介绍 Socket.IO 微信公众号已开启,小菜良记,没关注的同学们记得关注哦! 在介绍 Socket.IO 之前, 我们先考虑一个问题, 如果这个时候有个需求, 类似实 ...

  5. 微信小程序 WebSocket 通信 —— 在线聊天

    在Node栏目就讲到了Socket通信的内容,使用Node实现Socke通信,还使用两个流行的WebSocket 库,ws 和 socket.io,在小程序中的WebSocket接口和HTML5的We ...

  6. 请使用netty框架实现高效稳定的websocket通信

    Netty 是一个异步事件驱动的网络应用框架,提供了一种高效稳定的方法来实现 WebSocket 通信. 要使用 Netty 实现 WebSocket 通信,需要执行以下步骤: 创建一个新的 Nett ...

  7. 在vue中webSocket通信

    1.简单介绍 基于webSocket通信的库主要有 socket.io,SockJS,这次用的是 SockJS. 2.前提 这里我们使用sockjs-client.stomjs这两个模块,要实现web ...

  8. 基于asp.netCoreWebApi的webSocket通信示例(net6)

    背景: 在阿里云服务器中搭建了常规的tcp server服务(基于.net framework 4.0).用以实现远程控制家里的鱼缸灯,办公室的电脑开关机等功能.客户端采用PC桌面端和微信小程序端. ...

  9. Netty作为服务端的websocket通信

    http协议是无状态的,因此导致客户端每次通信都需要携带标识(session)给服务端,以此来识别是哪个客户端发送过来的信息.但是当服务端主动推送给客户端时就无法实现了,因为服务端不知道客户端在哪,此 ...

  10. 基于H5的webSocket通信

    基于H5的webSocket通信 这里主要以一个简单例子来做说明 创建一个主服务器 1.创建一个主服务器 主服务器创建逻辑过程 /*1.通过ws模块来创建服务器2.服务器连接客户端---(给客户端编号 ...

最新文章

  1. Redhat、CentOS进单用户模式进行维护
  2. SAP云平台里Business Application Studio的角色分配截图
  3. PingCAP黄东旭:云原生、开源与分布式是数据库行业发展关键词
  4. java10 WeakHashMap
  5. word中输入带圈字符
  6. Matlab中插值函数汇总及使用说明
  7. 56款超赞的国外html表单模板
  8. Navicat简单使用方法。
  9. 从90年代JDM到现在CDM现在namuDM,来了
  10. SpringBoot——Banner介绍
  11. 可以发热的“电”羽绒服!60秒升温15度,自带充电宝,脏了还能机洗
  12. 《零基础学C语言》光盘内容
  13. EC20 HTTP 图片传输
  14. DS二叉树--层次遍历
  15. Tomcat部署war包项目
  16. VCC、 VDD、VEE、VSS的区别
  17. Hibernate: Duplicate entry for key错误排查
  18. 去年华为晋身非洲智能手机市场前三,非洲之王受威胁
  19. Swing 入门介绍
  20. 『DNS隧道工具』— dns2tcp

热门文章

  1. 解决VisualStudio2008下asp.net mvc开发向View中添加服务器控件崩溃的问题
  2. VS2008中openGL开发环境配置
  3. 一张表不能超过多少索引_论文一般查重率不能超过多少
  4. 拓端tecdat|Python中的Apriori关联算法-市场购物篮分析
  5. 光模块自动测试系统软件,可插拔收发光模块自动化检测系统
  6. css基础知识汇总4
  7. 目标检测之Faster RCNN理论概述
  8. oracle歸檔日誌,oracle歸檔日誌清理 | 學步園
  9. 防抖与节流方案_手写系列之防抖和节流
  10. [ 深度学习 ] —— 图卷积神经网络 GCN