欢迎来到可可资源网 免费分享实用的学习资源及技术教程  技术爱好者的栖息之地
✌可可资源网✌
当前位置:首页 > 易语言源码 > 正文

[原创]websocketpp源码,易语言源码,易语言内存调用源码教程

编辑:可可日期:2021-08-21 15:15:01浏览:1.3w分类:易语言源码下载地址

易语言的科学计数法会丢失数据,必须以指针方式,或者文本方式存放来读取和写入,此方法使我非常苦恼,又因易语言的unicode不能显示原因导致我的一些数据必须以转码方式存放与读取,所以打算学习下火山开发,但是突然发现自己好像玩不转(关于底层封装,数据转换),于是打算学习下C++再来学习火山,在学习了一个星期C++,发现C++不是那么难,易语言进阶学者都可以学下,拿国外开源项目websocketpp实践下(因为这玩意比较简单),编译给易语言使用。,本贴结尾分享websocketppC++源码,易语言内存调用源码。

WebSocket++ 是一个 C++ 库,可用于实现 WebSocket 功能。该项目的目标是提供可移植、灵活、轻量级、低级别和高性能的 WebSocket 实现。WebSocket++ 不打算单独用作 Web 应用程序框架或全功能 Web 服务平台。因此,组件、示例和性能调整面向作为 WebSocket 客户端或服务器的操作。有一些最小的便利特性偏离了这一点(例如响应除 WebSocket 升级以外的 HTTP 请求的能力),但这些不是项目的重点。特别是 WebSocket++ 不打算实现任何非 WebSocket 相关的回退选项(ajax/长轮询/彗星等)。为了保持紧凑和提高可移植性,WebSocket++ 项目努力在可能和适当的情况下减少或消除外部依赖。除了 C++11 标准库之外,WebSocket++ 核心没有任何依赖项。对于非 C++11 编译器,Boost 库为所使用的 C++11 功能提供了 polyfill。WebSocket++ 实现了一个可插拔的数据传输组件。默认组件允许通过使用 STL iostream 或通过读取和写入字符缓冲区的原始字节改组来减少功能。该组件没有非 STL 依赖,可以在没有 Boost 的 C++11 环境中使用。还包括一个基于 Asio 的传输组件,它提供全功能的网络客户端/服务器功能。该组件需要 Boost Asio 或 C++11 编译器和独立的 Asio。作为高级选项,如果您想使用其他库提供自己的传输层,WebSocket++ 支持自定义传输层。为了适应 WebSocket++ 收集的各种用例,该库的构建方式是大多数主要组件都是松散耦合的,并且可以换出和替换。WebSocket++ 将尝试跟踪 WebSocket 协议和任何扩展的未来发展。
Websocketpp介绍。Websocketpp又称的WebSocket ++,WebSocket++ 是一个 C++ 库,可用于实现 WebSocket 功能。该项目的目标是提供可移植、灵活、轻量级、低级别和高性能的 WebSocket 实现。这是官网:https://docs.websocketpp.org/index.html具有以下等功能。1.子协议交互2.设置和读取协议头3.心跳ping和pong4.Http代理5.设置UA协议头6.设置Origin7.定时器和线程安全8.主动关闭9.所有向连接发送一条消息上面写的功能我都没有封装,只封装了回调绑定,连接,发送等功能...
    • 关于websocketpp编译
    • C++编译DLL供易语言使用
    • 易语言DLL文件不落地内存调用
  • 关于websocketpp编译

websocketpp SSL编译环境需要Boost库和OPENSSL库,这两个库可以网上下载或者自己到官网源码区编译(我是下载编译好)

Boost库官网:http://www.boost.org/

Boost库版本下载地址:

https://sourceforge.net/projects/boost/files/boost-binaries/

openssl下载地址:

https://www.openssl.org/source/

以及websocketpp源码下载地址:https://github.com/zaphoyd/websocketpp

我们打开测试例子print_client_tls文件cpp

包含头文件和库以后遇到坑,提示删除lib文件,这里我们给加上;

#pragmacomment(lib,"libcrypto.lib")#pragmacomment(lib,"libssl.lib")

添加以后编译通过~

C++编译DLL供易语言使用

#define dllinput __declspec(dllexport)//改名

dllinput int __stdcallSetInit(int*openPtr,int*message,int*onCloss)//声明函数

打开配置属性 -- C/C++ -- 高级 -- 调用约定

我们可以看到C ++默认编译是__cdecl调用约定,直接编译会导致导出的函数名字乱码(函数名字粉碎机由来)

一般人会用extern“C”会添加到导出函数前面,防止C ++乱来(这句话代码是C ++编译器按C标准来编译C语言代码

但是这样我们不得不在易语言声明DLL名中加上@

所以我们用另一种导出函数名字方式,创建def定义文件,添加函数名称,这样c++就会跟着你定义的函数名字编译。我们还需要在导出函数的类型后面加一个__stdcall,来使易语言能够直接调用。编译后的DLL文件200KB,真是小而又强悍!

易语言DLL文件不落地内存调用

为什么要写内存调用,因为我们是用易语言,易语言静态编译都是只有一个文件,如果目录里加个DLL文件,PHP天下第一的语言爱好者还以为我们会其他语言

子程序名返回值类型公开备 注_GetProcAddress整数型参数名类 型参考可空数组备 注hLibModule整数型lpProcName整数型

置入代码({93, 131, 236, 12, 86, 139, 116, 36, 20, 133, 246, 116, 19, 139, 76, 36, 24, 133, 201, 116, 11, 139, 70, 60, 3, 198, 131, 120, 124, 0, 117, 9, 51, 192, 94, 131, 196, 12, 194, 8, 0, 139, 64, 120, 43, 76, 48, 16, 139, 84, 48, 20, 83, 139, 92, 48, 32, 3, 198, 85, 139, 104, 36, 87, 139, 120, 28, 3, 254, 3, 222, 3, 238, 137, 124, 36, 20, 137, 84, 36, 32, 59, 202, 119, 15, 139, 4, 143, 95, 93, 91, 3, 198, 94, 131, 196, 12, 194, 8, 0, 139, 64, 24, 51, 255, 137, 68, 36, 16, 133, 192, 118, 76, 15, 183, 76, 125, 0, 137, 76, 36, 24, 59, 202, 119, 58, 139, 4, 187, 139, 76, 36, 36, 3, 198, 138, 17, 58, 16, 117, 26, 132, 210, 116, 18, 138, 81, 1, 58, 80, 1, 117, 14, 131, 193, 2, 131, 192, 2, 132, 210, 117, 228, 51, 192, 235, 5, 27, 192, 131, 216, 255, 133, 192, 116, 25, 139, 84, 36, 32, 139, 68, 36, 16, 71, 59, 248, 114, 180, 95, 93, 91, 51, 192, 94, 131, 196, 12, 194, 8, 0, 139, 68, 36, 20, 139, 76, 36, 24, 139, 4, 136, 95, 93, 91, 3, 198, 94, 131, 196, 12, 194, 8, 0})

返回(0)

看几遍内存调用机制,好把,这个汇编写的,我实在看不懂。

但不妨碍我复制粘贴代码的操作。

但是你以为我就不懂原理?赶紧百度搜一下装大神。。。。

LoadLibrary加载dll,返回模块句柄,_GetProcAddress 获取函数地址,用官网核心库调用子程序()就可以达到内存调用了

这时候原理都明白了,接着写内存调用写成模块。模块通过编译大小200KB,测试功能,完整。

但是。。

我尼玛这个websocketpp是一个单线程,我得手动开启多线程,好在websocketpp官网自带线程教程,而且它的线程是安全的。

教你写多线程以及ID映射:https://docs.websocketpp.org/md_tutorials_utility_client_utility_client.html

特别是,WebSocket 客户端需要安全的随机数生成器。WebSocket++ 可以使用boost_random使用C++11 标准库<random>。因为这个例子也使用了线程,如果我们没有 C++11 std::thread 可用,我们将需要包含boost_thread
该websocket_endpoint对象获得了一些新的数据成员和方法。它现在可以追踪连接ID和关联数据之间的映射,以及要分发的下一个连续ID号。该connect()方法启动一个新的连接方法。该get_metadata方法检索给定 ID 的元数据。

这些多线程和ID操作就不搞了,以后有时间慢慢来,这就是我学完C++的所做出的果实。

下面是C++源代码。易语言模块源代码。易语言测试示例源代码

引用模块

源码文件名模块文件名
易语言测试模块例子.e
斜飞.ec
简单例子SSL_2.e
鱼刺类.HWSS.服务端(HTTPS.WebSocketSSL.Server).ec

引用支持库

源码文件名支持库文件名支持库标识
易语言内存调用C++DLL.e系统核心支持库 5.7d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1A512548E76954B6E92C21055517615B0
易语言测试模块例子.e系统核心支持库 5.7d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1A512548E76954B6E92C21055517615B0
多线程支持库 2.05F99C1642A2F4e03850721B4F5D7C3F8
简单例子SSL_2.e系统核心支持库 5.7d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1A512548E76954B6E92C21055517615B0

下载地址

转载:感谢您对可可资源网网站平台的认可,以及对我们原创作品以及文章资源的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源可可资源网”。https://www.100keke.cn/eyuyan/12933.html