从go程序中发消息给winform(C#)
背景:
1、服务端语言为GO,客户端语言为:C#(WinForm);
2、在客户端操执行长耗时任务时,服务器应该将后台日志或定时将心跳信息及时传递给客户端,这样方便用户查看服务器执行情况(重要)。
一、C#核心代码(启动的是订阅服务端)
using Hprose.RPC;
using Hprose.RPC.Plugins.Log;
using Hprose.RPC.Plugins.Push;
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.Windows.Forms; namespace win_push_msg_client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void 测试ToolStripMenuItem_Click(object sender, EventArgs e)
{
callAppendLog("开始"); Task.Factory.StartNew(() =>
{
try
{
#region
// 服务端启动
//string addrStr = "127.0.0.1";//要其它机器访问,则不能用本机
string addrStr = "192.168.17.101";
IPAddress iPAddress = Dns.GetHostAddresses(addrStr)[0];
TcpListener server = new TcpListener(iPAddress, 8888);
server.Start();
var service = new Broker(new Service()).Service;
ServiceCodec.Instance.Debug = true;
service.Use(Log.IOHandler)
.Use(Log.InvokeHandler)
.Bind(server);
// 启动订阅服务
var client = new Client(string.Format("tcp4://{0}:8888", addrStr));
var prosumer = new Prosumer(client, "C#");
prosumer.OnSubscribe += (topic) => {
this.callAppendLog(topic + " 订阅成功.");
};
prosumer.OnUnsubscribe += (topic) => {
this.callAppendLog(topic + " 取消订阅成功");
};
prosumer.Subscribe<string>("log_msg", (data) => {
this.callAppendLog(data);
});
this.callAppendLog("已订阅主题:log_msg"); #endregion
}
catch (Exception ex)
{
this.callAppendLog(ex.Message);
}
});
} private void callAppendLog(string msg)
{
this.Invoke(new Action(() => {
this.richTextBox1.AppendText(msg);
this.richTextBox1.AppendText("\n");
}));
}
}
}
二、GO核心代码:
package main import (
"github.com/hprose/hprose-golang/v3/rpc"
"github.com/hprose/hprose-golang/v3/rpc/plugins/push"
"time"
) func main() {
//client2 := rpc.NewClient("tcp4://127.0.0.1:8888/")
client2 := rpc.NewClient("tcp4://192.168.17.101:8888/")
prosumer2 := push.NewProsumer(client2, "发送方1")
time.Sleep(time.Millisecond * 100)
prosumer2.Push("人来了1a", "log_msg", "C#")
prosumer2.Push("人来了2c", "log_msg", "C#")
}
/*
https://github.com/hprose/hprose-golang/blob/v3/rpc/rpc_test.go#L768 包:github.com/hprose/hprose-golang/v3
*/
从go程序中发消息给winform(C#)的更多相关文章
- windows程序消息机制(Winform界面更新有关)
windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Win ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- Android应用程序线程消息循环模型分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...
- node配置微信小程序解密消息以及推送消息
上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...
- node.js微信小程序配置消息推送
在开发微信小程序时,有一个消息推送,它的解释是这样的. 消息推送具体的内容是下面的这个网址 https://developers.weixin.qq.com/miniprogram/dev/fra ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 微信小程序模板消息群发解决思路
基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...
- ChangeWindowMessageFilterEx 概述(用于取消低权限程序向高权限程序发送消息不成功的限制,分6个等级)
ChangeWindowMessageFilterEx 函数,为指定窗口修改用户界面特权隔离 (UIPI) 消息过滤器. 函数原型: BOOL WINAPI ChangeWindowMessageFi ...
- 1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory
1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory
随机推荐
- Flink 是如何统一批流引擎的
关注公众号:大数据技术派,回复"资料",领取1000G资料. 本文首发于我的个人博客:Flink 是如何统一批流引擎的 2015 年,Flink 的作者就写了 Apache Fli ...
- 洛谷 P4002 - [清华集训2017]生成树计数(多项式)
题面传送门 神题. 考虑将所有连通块缩成一个点,那么所有连好边的生成树在缩点之后一定是一个 \(n\) 个点的生成树.我们记 \(d_i\) 为第 \(i\) 个连通块缩完点之后的度数 \(-1\), ...
- Codeforces 512D - Fox And Travelling(树上背包)
题面传送门 题意: 给出一张无向图,每次你可以选择一个度数 \(\leq 1\) 的点并将其删除. 问对于 \(k=0,1,2,\dots,n\),有多少个删除 \(k\) 个点的序列,答案模 \(1 ...
- Codeforces 627E - Orchestra(双向链表,思维题)
Codeforces 题目传送门 & 洛谷题目传送门 下设 \(n,m\) 同阶. 首先有一个傻子都会的暴力做法,枚举矩形的上.下边界 \(l,r\),考虑集合多重集 \(S=\{y|x\in ...
- 【R】调整ggplot图例大小
图例太多时,会挤压正图,显得正图展示区域很小,这时有必要缩小图例. ################# # 减小ggplot图例 ################# library(ggplot2) ...
- [R] 如何绘制各样本的pathway丰度热图?
前言 一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue.如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢? 对于K ...
- Python基础之格式化输出的三种方式
目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...
- react native 导航器 Navigator 简单的例子
最近学习react native 是在为全栈工程师而努力,看网上把react native说的各种好,忍不住学习了一把.总体感觉还可以,特别是可以开发android和ios这点非常厉害,刚开始入门需要 ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...
- 使用clion阅读eos源码
配置mingw 安装clion 从github克隆源码 使用clion open打开 在cmake上使用boost: sudo apt-get install libboost-all-dev