匿名用户

1级

2017-06-07 回答

网上很多关于websocket发送数据大于大于0xFFFF(65535)的处理都是一句话“暂不处理”!!!!!所以特写此文。

int WSSession::safeSendFrame(uint8_t *buffer, size_t bufferSize, enum wsFrameType frameType)

{

// 发数据到浏览器需要封装一个websocket的头,但wsMakeFrame()函数e5a48de588b6e79fa5e9819331333363383935存在内存拷贝,会消耗性能,

// 所以这里分两步发:1、发websocket头,2、发实际数据。

// 构造websocket头

uint8_t wsMakeFrameHead[20] = {0};

size_t FrameHeadLen = 0;

assert(frameType < 0x10);

if (bufferSize > 0)

assert(buffer);

wsMakeFrameHead[0] = 0x80 | frameType;

if (bufferSize <= 125) {

wsMakeFrameHead[1] = bufferSize;

FrameHeadLen = 2;

} else if (bufferSize <= 0xFFFF) {

wsMakeFrameHead[1] = 126;

uint16_t payloadLength16b = htons(bufferSize);

memcpy(&wsMakeFrameHead[2], &payloadLength16b, 2);

FrameHeadLen = 4;

} else {

// assert(dataLength <= 0xFFFF);

//implementation for 64bit systems

/*wsMakeFrameHead[1] = 127;

uint64_t lenHigh32b = htonl((bufferSize>>32)& 0xFFFFFFFF);

uint64_t lenLow32b = ((uint64_t)htonl(bufferSize&0xFFFFFFFF)) << 32;

uint64_t payloadLength64b = lenHigh32b | lenLow32b;

memcpy(&wsMakeFrameHead[2], &payloadLength64b, 8);

FrameHeadLen = 10;*/

wsMakeFrameHead[1] = 127;

wsMakeFrameHead[2] = 0;

wsMakeFrameHead[3] = 0;

wsMakeFrameHead[4] = 0;

wsMakeFrameHead[5] = 0;

wsMakeFrameHead[6] = (byte)(bufferSize >>24);

wsMakeFrameHead[7] = (byte)(bufferSize >>16);

wsMakeFrameHead[8] = (byte)(bufferSize >>8);

wsMakeFrameHead[9] = (byte)(bufferSize & 0xFF);

FrameHeadLen = 10;

}

// 发websocket头

int nRetH = safeSend(wsMakeFrameHead, FrameHeadLen);

// 发实际数据

int nRetD = safeSend(buffer, bufferSize);

if (nRetH != EXIT_SUCCESS || nRetD != EXIT_SUCCESS)

return EXIT_FAILURE;

return EXIT_SUCCESS;

}

websocket传输数据大小限制_websocket 发送字符串数据上限是多少相关推荐

  1. websocket传输数据大小限制_WebSocket基础知识笔记

    一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有 ...

  2. websocket传输数据大小限制_websocket设置传输大小

    tomcat中有提到: If the application does not define a MessageHandler.Partial for incoming text messages, ...

  3. websocket传输数据大小限制_踩踏websocket:发送缓冲区大小超过允许的限制

    在客户端我使用Stomp进行websocket连接,服务器端使用 Spring 4 客户端我做了配置 var socket = new SockJS(urlBase + "/" + ...

  4. C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

    前言 这几天加紧赶工写服务器端的程序,所有系列文章更新较慢,见谅: ) 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心.实现以及其他能够贴 ...

  5. pythonrequests发送数据_在python中使用requests 模拟浏览器发送请求数据的方法

    在python中使用requests 模拟浏览器发送请求数据的方法 如下所示: import requests url='http://####' proxy={'http':'http://#### ...

  6. qt定时连续发送udp数据包_TCP和UDP

    首先强调一点,TCP/IP协议是一个协议簇.里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP.IP协议是两个很重要的协议,就用他两命名了. 两个协议的区别实际使用时 ...

  7. Django,Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传

    JSON JSON指的是JavaScript对象方法(JavaScript Object Notation) JSON是轻量级的文本数据交换格式 JSON独立于语言 JSON具有自我i描述,更易理解 ...

  8. python发送json数据_在Websockets上发送JSON

    我有一个简单的Python tornado Websockets服务器,从JavaScript客户端接收消息.我正在尝试发送JSON数据,我找到的唯一解决方案是将JSON对象转换成字符串JSON,发送 ...

  9. Android客户端通过TCP接收服务器端发送的数据

    引言 因为我确实不懂TCP通信这一块儿,最近项目中要实现客户端接收服务器端发送过来的数据(这个数据是int型的,范围是0~360,而且服务器端用C语言写的,每一秒发送一次,客户端只需要不断接收就好了) ...

最新文章

  1. things to be done
  2. ITK:计算两个图像之间的均方度量值
  3. Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers
  4. 七代处理器装win7_为啥新电脑没法装windows7系统?解决方法总会有的
  5. Linux下的硬件驱动——USB设备(下)
  6. FISCO BCOS PBFT是什么 基础流程
  7. java excel 表头_Java如何生成excel的表头可变的示例代码
  8. java课程设计模拟科学计算器_JAVA课程设计科学计算器
  9. 物料移动类型和后勤自动科目设置-转
  10. 事务的隔离级别和锁的实现方式
  11. 【UI设计】零基础带你入门UI设计
  12. 简单区分单射、满射与双射
  13. Python写的现金管理程序
  14. 本地php开发环境出现 cURL error 60
  15. 公众号榜单 | 2020·8月公众号原创排行榜重磅发布
  16. STM32开启和关闭总中断的方法
  17. H.264视频编码推荐的分辨率和码率配置表
  18. 呼死你泛滥 安全联盟提醒网民远离欺诈
  19. 宝尚12月25日期权操作策略:以高抛低吸为主
  20. 自己的Flash作品(1)截图

热门文章

  1. php报503怎么排查,php监控日志500、503错误并发送邮件提示的代码
  2. 第八届蓝桥杯第八题日期问题
  3. Qt 串口类QSerialPort 学习笔记
  4. matlab查找指定文件夹下文件(附汉字和标点符号读取方法)
  5. 让没有连续TabOrder的Edit连续获得焦点 [精华]
  6. win10安装pycocotools遇到的问题
  7. C# async await
  8. linux curl post/put请求
  9. 一个文科妹子的前端悲欢编程之路
  10. bzoj 1217 [HNOI2003]消防局的设立 贪心