首页 文章 精选 留言 我的

精选列表

搜索[Unicode通信],共10000篇文章
优秀的个人博客,低调大师

高性能网络通信框架 HP-Socket v5.8.1

项目主页:http://www.oschina.net/p/hp-socket 开发文档: https://www.docin.com/p-2571462318.html 下载地址: https://github.com/ldcsaa/HP-Socket QQ Group: 44636872, 75375912 v5.8.1 更新 一、第三方库更新 HTTP 解析器:llhttp 取代 http_parser 内存分配器:mimalloc 取代 jemalloc OpenSSL 升级到 1.1.1i 版本 二、其他更新 库公开头文件移到 include/hpsocket 目录 Windows目录结构调整:Common/Src 改为 Src/Common,Common/Lib 改为 Dependent HP-Socket 组件列表 基础组件 SSL 组件 HTTP 组件

优秀的个人博客,低调大师

Flutter与Android通信方式->BasicMessageChannel方式(发送消息并且返回结果)

摘要:Flutter版本号:1.12.13,Kotlin版本号:1.3.72 版本号不同,实现的方式不一样,所以特此标注下。 具体的实现原理,自行查阅。这里只写代码实现过程,主要原因是网上Kotlin的实现方式实在太少,特此记录。 Flutter: import 'package:base_library/base_library.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class ChannelDemoPage extends StatefulWidget { @override _ChannelDemoPageState createState() => _ChannelDemoPageState(); } class _ChannelDemoPageState extends State<ChannelDemoPage> { static const _channel = const MethodChannel('plugins.flutter.io/FlutterMessagePlugin'); static const eventChannel = EventChannel('plugins.flutter.io/FlutterEventPlugin'); static const _basicMessageChannel = BasicMessageChannel( 'plugins.flutter.io/FlutterBasicMessageChannel', StringCodec()); @override void initState() { super.initState(); eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); // ignore: missing_return _basicMessageChannel.setMessageHandler((String message) { LogUtil.e("Flutter收到Android发来Basic消息->, $message"); }); } void _onEvent(Object event) { LogUtil.e("Flutter收到Android发来的消息-> " + event.toString()); } void _onError(Object error) { LogUtil.e("错误:" + error.toString()); } @override Widget build(BuildContext context) { return new Scaffold( body: new Row(), floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, floatingActionButton: new FloatingActionButton( backgroundColor: Colors.blueAccent, onPressed: () { this.getResult(); }, child: new Icon(Icons.adb), ), ); } void getResult() async { try { Map<String, Object> map = {"shareUrl": "https://www.baidu.com"}; var result = await _channel.invokeMethod("getRealUrl", map); LogUtil.e("result->$result"); } catch (e) { LogUtil.e("e->, $e"); } } } Kotlin: import android.content.Context import android.util.Log import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.BasicMessageChannel import io.flutter.plugin.common.BasicMessageChannel.MessageHandler import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.PluginRegistry import io.flutter.plugin.common.StringCodec class FlutterBasicMessageChannel : FlutterPlugin, MessageHandler<String> { private var channelName = "plugins.flutter.io/FlutterBasicMessageChannel" private var context: Context? = null companion object { private var basicMessageChannel: BasicMessageChannel<String>? = null fun sendContent(content: String) { basicMessageChannel?.send(content) } } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { basicMessageChannel = BasicMessageChannel(binding.binaryMessenger, channelName, StringCodec.INSTANCE) basicMessageChannel?.setMessageHandler(this) context = binding.applicationContext } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { basicMessageChannel?.setMessageHandler(null) basicMessageChannel = null; } override fun onMessage(message: String?, reply: BasicMessageChannel.Reply<String>) { Log.i("Android", "Received message = $message") reply.reply("Reply from Android") } } import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant class MainActivity: FlutterActivity () { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { flutterEngine.getPlugins().add(FlutterMessagePlugin()); flutterEngine.getPlugins().add(FlutterEventPlugin()); flutterEngine.getPlugins().add(FlutterBasicMessageChannel()); GeneratedPluginRegistrant.registerWith(flutterEngine); } } 显示结果: I/flutter (19721): common_utils e result->处理完成 I/flutter (19721): common_utils e Flutter收到Android发来的消息-> Android发送消息到Flutter I/flutter (19721): common_utils e Flutter收到Android发来Basic消息->, Android发送Basic消息到Flutter

优秀的个人博客,低调大师

Flutter与Android通信方式->MethodChannel方式(发送消息并且返回结果)

摘要:Flutter版本号:1.12.13,Kotlin版本号:1.3.72 版本号不同,实现的方式不一样,所以特此标注下。 具体的实现原理,自行查阅。这里只写代码实现过程,主要原因是网上Kotlin的实现方式实在太少,特此记录。 Flutter: import 'package:base_library/base_library.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class ChannelDemoPage extends StatefulWidget { @override _ChannelDemoPageState createState() => _ChannelDemoPageState(); } class _ChannelDemoPageState extends State<ChannelDemoPage> { static const _channel = const MethodChannel('plugins.flutter.io/FlutterMessagePlugin'); @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return new Scaffold( body: new Row( ), floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, floatingActionButton: new FloatingActionButton( backgroundColor: Colors.blueAccent, onPressed: () { this.getResult(); }, child: new Icon(Icons.adb), ), ); } void getResult() async { try { Map<String, Object> map = {"shareUrl": "https://www.baidu.com"}; var result = await _channel.invokeMethod("getRealUrl", map); LogUtil.e("result->$result"); } catch (e) { LogUtil.e("e->, $e"); } } } Kotlin: import android.content.Context import android.util.Log import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.* import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result class FlutterMessagePlugin : FlutterPlugin, MethodCallHandler { private var channel: MethodChannel? = null private var context: Context? = null override fun onMethodCall(call: MethodCall, result: Result) { if (call.method == "getRealUrl") { var shareUrl = call.argument<String>("shareUrl"); Log.v("shareUrl=", shareUrl) result.success("处理完成") } else { result.notImplemented() } } companion object { var channelName = "plugins.flutter.io/FlutterMessagePlugin"; fun registerWith(registry: PluginRegistry.Registrar) { var flutterPlugin = FlutterMessagePlugin(); flutterPlugin.channel = MethodChannel(registry.messenger(), channelName); flutterPlugin.context = registry.context(); flutterPlugin.channel?.setMethodCallHandler(flutterPlugin); } } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { channel = MethodChannel(binding.binaryMessenger, channelName) context = binding.applicationContext channel!!.setMethodCallHandler(this) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { channel?.setMethodCallHandler(null) channel = null; } } import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant class MainActivity: FlutterActivity () { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { flutterEngine.getPlugins().add(FlutterMessagePlugin()); GeneratedPluginRegistrant.registerWith(flutterEngine); } } 显示结果: V/shareUrl=: https://www.baidu.com I/flutter: common_utils e result->处理完成

优秀的个人博客,低调大师

YurunHttp v3.4.0 发布,支持 Http2 全双工通信

YurunHttp 是开源的 PHP HTTP 类库,支持链式操作,简单易用。 支持所有常见的 GET、POST、PUT、DELETE、UPDATE 等请求方式,支持 Http2、WebSocket、浏览器级别 Cookies 管理、上传下载、设置和读取 header、Cookie、请求参数、失败重试、限速、代理、证书等。 git 仓库中 examples 目录里是示例代码! 更新日志(v3.4.0): 新增 新增支持全双工的 Http2 客户端 新增 Attributes 属性的常量定义类,所有 Attribute 操作使用该类中的常量作为名称 Swoole Handler 引入连接管理器 新增默认缺省的默认 UserAgent (可在每个请求中指定,或设置全局Attribute::USER_AGENT用以代替默认的 UA) 支持发送 Http2 请求不调用 recv() 优化 Request对象中的Attribute缺省情况下,会从YurunHttp类中获取 重构 Swoole Handler Http2 全双工用法 该用法仅支持 Swoole $uri = new Uri('https://wiki.swoole.com/'); // 客户端初始化和连接 $client = new \Yurun\Util\YurunHttp\Http2\SwooleClient($uri->getHost(), Uri::getServerPort($uri), 'https' === $uri->getScheme()); $client->connect(); // 请求构建 $httpRequest = new HttpRequest; $request = $httpRequest->header('aaa', 'bbb')->buildRequest($uri, [ 'date' => $i, ], 'POST', 'json'); for($i = 0; $i < 10; ++$i) { go(function() use($client, $request){ // 发送(支持在多个协程执行) $streamId = $client->send($request); var_dump('send:' . $streamId); // 接收(支持在多个协程执行) $response = $client->recv($streamId, 3); $content = $response->body(); var_dump($response); }); } 具体用法请看examples/http2Client.php 重大版本更新日志 每个小版本的更新日志请移步到 Release 查看 v3.4.0 新增支持Http2全双工用法 v3.3.0 新增支持Http2兼容用法 v3.2.0 新增支持Swoole WebSocket客户端 v3.1.0 引入浏览器级别Cookies管理 v3.0.0 新增支持Swoole协程 v2.0.0 黑历史,不告诉你 v1.3.1 支持Composer v1.0-1.3 初期版本迭代 Composer 本项目可以使用composer安装,遵循psr-4自动加载规则,在你的composer.json中加入下面的内容 { "require": { "yurunsoft/yurun-http": "^3.4.0" } } 然后执行composer update安装。 之后你便可以使用include "vendor/autoload.php";来自动加载类。(ps:不要忘了namespace) 用法 简单调用 <?php use Yurun\Util\HttpRequest; $http = new HttpRequest; $response = $http->ua('YurunHttp') ->get('http://www.baidu.com'); echo 'html:', PHP_EOL, $response->body(); PSR-7 请求构建 <?php use Yurun\Util\YurunHttp\Http\Request; use Yurun\Util\YurunHttp; $url = 'http://www.baidu.com'; // 构造方法定义:__construct($uri = null, array $headers = [], $body = '', $method = RequestMethod::GET, $version = '1.1', array $server = [], array $cookies = [], array $files = []) $request = new Request($url); // 发送请求并获取结果 $response = YurunHttp::send($request); var_dump($response); Swoole 协程模式 <?php use Yurun\Util\YurunHttp; use Yurun\Util\HttpRequest; // 设置默认请求处理器为 Swoole YurunHttp::setDefaultHandler('Yurun\Util\YurunHttp\Handler\Swoole'); // php 5.4 // YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class); // php 5.5+ // Swoole 处理器必须在协程中调用 go('test'); function test() { $http = new HttpRequest; $response = $http->get('http://www.baidu.com'); echo 'html:', PHP_EOL, $response->body(); } WebSocket Client YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class); go(function(){ $url = 'ws://127.0.0.1:1234/'; $http = new HttpRequest; $client = $http->websocket($url); if(!$client->isConnected()) { throw new \RuntimeException('Connect failed'); } $client->send('data'); $recv = $client->recv(); var_dump('recv:', $recv); $client->close(); }); 具体详见examples目录中的示例代码 相关地址: API 文档:https://apidoc.gitee.com/yurunsoft/YurunHttp Gitee:https://gitee.com/yurunsoft/YurunHttp Github:https://github.com/Yurunsoft/YurunHttp

优秀的个人博客,低调大师

smart-socket v1.4.4 发布,国产 Java AIO 通信框架

smart-socket 是一款国产开源的 Java AIO 框架,追求代码量、性能、稳定性、接口设计各方面都达到极致。如果 smart-socket 对您有一丝帮助,请 Star 一下我们的项目并持续关注;如果您对 smart-socket 并不满意,那请多一些耐心,smart-socket 一直在努力变得更好。 Maven <!-- https://mvnrepository.com/artifact/org.smartboot.socket/aio-core --> <dependency> <groupId>org.smartboot.socket</groupId> <artifactId>aio-core</artifactId> <version>1.4.4</version> </dependency> 更新内容: 重新设计 NetMonitor 接口,丰富底层监控能力,配合 MonitorPlugin 插件辅助精准调优。(PS: NetMonitor 比较适合高级玩家,未来可能会存在不兼容性更新,暂不推荐大家使用) 接入 PMD、CheckStyle 检测 smart-socket 编码规范。还未完全修改完,暂时将级别设置成 warning。 采用无锁化队列提升性能。 新增插件:SocketOptionPlugin,服务端用于设置客户端连接的 socket option。 优化插件:MonitorPlugin,新增服务运行监控指标项;HeartPlugin,优化心跳消息发送逻辑。 性能测试 配置:4 核 2.9GHz,采用 wrk 进行 http 消息压测 QPS 高达 73W+ 很遗憾文档未能及时更新,有疑问欢迎与本人直接交流。

优秀的个人博客,低调大师

高性能网络通信框架 HP-Socket v5.6.1

本次更新主要对 SSL、HTTP 和 UDP 系列组件作了优化和调整! v5.6.1 更新 一、SSL 组件更新 所有 SSL 组件增加以下接口方法支持加载内存证书 1) Server:SetupSSLContextByMemory(), AddSSLContextByMemory() 2) Agent:SetupSSLContextByMemory() 3) Client:SetupSSLContextByMemory() 所有 SSL 组件增加 GetSSLSessionInfo() 方法,用来获取 SSL 会话相关信息 SSL Server 组件提供默认的 SNI 服务器域名绑定机制,大多数情形下应用程序不必自定义 SNI 回调函数 1) 当 SetupSSLContext() 的 'fnServerNameCallback' 参数值为 nullptr 则启用默认的服务器域名绑定机制 2) BindSSLServerName():绑定服务器域名到指定证书 3) HP_SSL_DefaultServerNameCallback():默认 SNI 回调函数 二、HTTP 组件更新 HTTP Server 组件的 SendWSMessage() 方法删除 lpszMask 参数 所有 HTTP 组件的 SendWSMessage() 方法的 pData 参数类型改为 const BYTE*,因此可以传入常量 所有 HTTP 组件添加 SendChunkData() 方法以方便地发送 Chunked 数据 三、UDP 组件更新 优化 Linux 平台的 UDP Cast 组件,使得其与 Windows 平台的 UDP Cast 组件保持行为一致 提升所有 UDP 组件的 IPv6 兼容性 UDP Client/Server 组件关闭时自动向对端发送“关闭通知”数据报 四、其他更新 jemalloc 升级到 5.2.1 版本 OpenSSL 升级到 1.1.1d 版本 代码优化,提高稳定性 HP-Socket 组件列表 基础组件 SSL 组件 HTTP 组件

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册