背景:

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#)的更多相关文章

  1. windows程序消息机制(Winform界面更新有关)

    windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Win ...

  2. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  3. Android应用程序线程消息循环模型分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...

  4. node配置微信小程序解密消息以及推送消息

    上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...

  5. node.js微信小程序配置消息推送

    在开发微信小程序时,有一个消息推送,它的解释是这样的. 消息推送具体的内容是下面的这个网址   https://developers.weixin.qq.com/miniprogram/dev/fra ...

  6. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  7. 微信小程序模板消息群发解决思路

    基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...

  8. ChangeWindowMessageFilterEx 概述(用于取消低权限程序向高权限程序发送消息不成功的限制,分6个等级)

    ChangeWindowMessageFilterEx 函数,为指定窗口修改用户界面特权隔离 (UIPI) 消息过滤器. 函数原型: BOOL WINAPI ChangeWindowMessageFi ...

  9. 1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory

    1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory

随机推荐

  1. Flink 是如何统一批流引擎的

    关注公众号:大数据技术派,回复"资料",领取1000G资料. 本文首发于我的个人博客:Flink 是如何统一批流引擎的 2015 年,Flink 的作者就写了 Apache Fli ...

  2. 洛谷 P4002 - [清华集训2017]生成树计数(多项式)

    题面传送门 神题. 考虑将所有连通块缩成一个点,那么所有连好边的生成树在缩点之后一定是一个 \(n\) 个点的生成树.我们记 \(d_i\) 为第 \(i\) 个连通块缩完点之后的度数 \(-1\), ...

  3. Codeforces 512D - Fox And Travelling(树上背包)

    题面传送门 题意: 给出一张无向图,每次你可以选择一个度数 \(\leq 1\) 的点并将其删除. 问对于 \(k=0,1,2,\dots,n\),有多少个删除 \(k\) 个点的序列,答案模 \(1 ...

  4. Codeforces 627E - Orchestra(双向链表,思维题)

    Codeforces 题目传送门 & 洛谷题目传送门 下设 \(n,m\) 同阶. 首先有一个傻子都会的暴力做法,枚举矩形的上.下边界 \(l,r\),考虑集合多重集 \(S=\{y|x\in ...

  5. 【R】调整ggplot图例大小

    图例太多时,会挤压正图,显得正图展示区域很小,这时有必要缩小图例. ################# # 减小ggplot图例 ################# library(ggplot2) ...

  6. [R] 如何绘制各样本的pathway丰度热图?

    前言 一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue.如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢? 对于K ...

  7. Python基础之格式化输出的三种方式

    目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...

  8. react native 导航器 Navigator 简单的例子

    最近学习react native 是在为全栈工程师而努力,看网上把react native说的各种好,忍不住学习了一把.总体感觉还可以,特别是可以开发android和ios这点非常厉害,刚开始入门需要 ...

  9. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...

  10. 使用clion阅读eos源码

    配置mingw 安装clion 从github克隆源码 使用clion open打开 在cmake上使用boost: sudo apt-get install libboost-all-dev