用WebSocket从服务端直接发送消息给all客户端。

1、在ServerModule 放TUniThreadTimer

2、timer event:

procedure TUniServerModule.UniThreadTimer1Timer(Sender: TObject);
begin
BroadcastMessage('update',
[
'value', Random(1000)
],
[boClientOnly]);
end;

一个名为update的消息被发送给所有现有的客户端,它带有一个名为value的参数,这个参数是一个介于0 ..999。定时器被调整为每秒发送一次消息。boClientOnly选项确保消息只在客户端处理,不会为此事件触发Ajax请求。
注意:参数调整:
BroadcastMessage('update', [ 'value', Random(1000) ]);
这将会通过每次更新都会为每个活动客户端生成一个Ajax事件(去掉第三步:client event):
procedure TMainForm.UniFormBroadcastMessage(const Sender: TComponent;
const Msg: string; const Params: TUniStrings);
begin
if Msg = 'update' then
UniLabel1.Caption := Params['value'].AsString;
end;

3、在mainform的client event的ext:

4、run:

你的unilabel不断更新数字。

5、用途:当你想用日期和时间等值重复更新客户端时,这很有用。这将消除持续发送Ajax请求并使服务器忙于处理它们的TUniTimer的使用。变通一下params.value是一数据结构字符串,将会有更多用途

6、默认情况下,WebSocket请求将使用与主HTTP服务器相同的IP地址和端口。例如,如果你的应用程序在8077端口上运行,那么将使用相同的端口来处理WebSocket请求。如果你的应用程序URL看起来像http://myserver.com:8077,那么WebSocket连接URL将是ws://myserver.com:8077。将使用同一个HTTP服务器处理HTTP和WebSocket请求。此场景适用于独立服务器和服务应用程序。在这些应用中,不需要绑定到不同的端口或IP地址,因为主HTTP服务器能够同时处理HTTP和WebSocket请求。

但是,如果您的应用程序部署为ISAPI或Apache模块,则模块中将没有内部HTTP服务器。外部web服务器(IIS、Apache等)运行自己的内部HTTP服务器。每个web服务器都使用自己专门的方法与websocket进行接口。有些应用程序(如IIS)使用专门的API,而其他应用程序则使用重写规则和代理技术来实现相同的目标。我们已经在这里详细讨论了IIS和Apache部署。

一般来说,当你的部署方法不是独立的服务器或服务(Windows或Linux)时,你应该选择不同的端口和/或IP地址来处理WebSocket请求。当您选择不同的端口或IP时,uniGUI将运行一个单独的HTTP服务器监听这个新端口。
如果您选择一个IP地址,这个服务器将绑定自己到该IP地址。所有WebSocket请求都会定向到这个专用的HTTP服务器。
配置不同的端口为了给websocket配置不同的端口,需要在应用中做一些设置。如果您的应用程序在超级服务器集群中运行,则此配置应在超级服务器配置文件中完成。
在application的ServerModule中找到WebSocketServer类属性。在这个类下有一个名为AuxPort的属性。AuxPort的默认值是0,这意味着websocket不会使用额外的端口。
非零值将强制uniGUI创建一个新的HTTP服务器,该服务器将在AuxPort上侦听传入的WebSocket请求。
例子:
如果您的web应用程序在端口8077上运行,并且AuxPort设置为8088,那么所有常规HTTP请求都将在端口8077上服务。您的应用程序URL将如预期的那样是http://myserver.com:8077。 在这个例子中,WebSocket请求将在端口8088上提供服务,这个URL将用于请求WebSocket连接:ws://myserver.com:8088。 在同一个示例中,如果您的应用程序是ISAPI(或Apache)模块,那么您的应用程序将使用其常规URL访问web应用程序,
如http://myserver.com/myapp.dll,但同样ws://myserver.com:8088将用于请求WebSocket连接。这意味着IIS或Apache将处理常规的HTTP调用,而内部HTTP服务器(侦听8088端口)将用于服务WebSocket请求。 辅助端口和防火墙注意事项:
当你配置一个不同的端口时,你需要确保这个辅助端口可以通过你的服务器防火墙或作为网络基础设施一部分的任何其他防火墙访问。
同样重要的是,任何试图访问您的web应用程序的客户端也应该能够访问这个额外的端口。例如,这个端口不应该被客户端网络上的防火墙阻止。
这个问题可以通过使用一个内部代理来解决,它将WebSocket调用(ws://globalurl)重定向到本地辅助端口(ws://localurl:aux_port)。
实现这一目标的方法对于每个web服务器都是不同的。主要是必须配置一个URL重写规则,将外部ws://请求重定向到运行在不同端口的内部WebSockets服务器。在这种情况下,全局端口将与应用程序主端口相同,但内部WebSockets服务器端口将不同。要实现这一点,你需要显式设置GlobalPort参数或为GlobalBinding属性设置一个值,包括正确的全局端口号。 配置不同的IP地址:
我们在上面提到过,当你为websocket子系统配置一个不同的端口时,你还应该确保这个端口在服务器端和客户端都没有被阻塞。
如果您的公司或客户端有限制网络规则,避免打开除80 (http)或443 (https)以外的任何端口,这可能会很困难。
在这种情况下,你可能需要在服务器上为WebSocket请求指定一个备用IP,而不是使用其他端口。在这种情况下,不需要更改端口号,因为这个备用IP将在主HTTP服务器的同一个端口上监听。
配置不同的IP需要服务器上有一个备用的全局IP。您需要调整一些参数来启用此功能。
第一个需要调整的参数是WebSocketServer类的Binding属性。这应该包含WebSockets HTTP服务器绑定的备用IP地址。
如果这个IP是一个全局IP地址,那么单独设置这个属性就足够了,否则,如果本地绑定IP与全局IP不同,那么您还必须为GlobalBinding属性设置一个值。例如,在某些网络中,使用路由器将全局IP地址重定向到内部服务器。在这种情况下,全局IP或URL可以与内部绑定IP地址不同。

unigui显示websocket服务端向客户端发送信息【15】的更多相关文章

  1. Java TCP服务端向客户端发送图片

    /** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...

  2. WebSocket服务端和客户端使用

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...

  3. HttpServletRequest获取浏览器、服务端和客户端信息

    如何通过HttpServletRequest来获取到上面的属性呢? 1.引入开源工具 <!-- https://mvnrepository.com/artifact/eu.bitwalker/U ...

  4. C# WebSocket 服务端示例代码 + HTML5客户端示例代码

    WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...

  5. 使用WebSocket实现服务端和客户端的通信

    开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...

  6. WebSocket——SuperWebSocket实现服务端和客户端

    WebSocket——SuperWebSocket实现服务端和客户端具体实现如下: 注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为Web ...

  7. 进程间通信WebSocket 服务端未启动时,客户端重连报错

    当WebSocket服务端未启动时,我们在客户端申请连接,会报 System.Net.Sockets.SocketException 异常. 当然,我们调试时异常设置默认是不勾选这个的.所以不影响正常 ...

  8. vue +signalR 实现服务端到客户端消息发送

    承接上一篇 上一篇博客实现是了消息的实时通信,这一篇博客主要讲如何从中心服务内部向客户端发送消息. 先看下最终效果: 在core应用程序里加一个控制器TestController 注入控制器中的IHu ...

  9. 使用flask_socketio实现服务端向客户端定时推送

    websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...

  10. 【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示

    前言: MQTT广泛应用于工业物联网.智能家居.各类智能制造或各类自动化场景等.MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信.机器与物联网通信等. ...

随机推荐

  1. Solution Set -「AGC 004~006」C~F

    目录 「AGC 004C」AND Grid 「AGC 004D」Teleporter 「AGC 004E」Salvage Robots 「AGC 004F」Namori ^ 「AGC 005C」Tre ...

  2. asp.net core 3.x 通用主机是如何承载asp.net core的-中

    便于理解直接录制视频了 必备知识: 依赖注入.配置系统.选项模式.推荐参考:A大博客 通用主机(参考:https://www.cnblogs.com/jionsoft/p/12154519.html) ...

  3. c# Polygon 画多边形,

    //随机多边形:using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  4. Java底层知识面试题

    JVM内存结构class文件格式JVM不会理解我们写的Java源文件, 我们必须把Java源文件编译成class文件, 才能被JVM识别, 对于JVM而言,class文件相当于一个接口class文件是 ...

  5. Alink漫谈(二十一) :回归评估之源码分析

    Alink漫谈(二十一) :回归评估之源码分析 0x00 摘要 Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法.流式算法的机器学习平台.本 ...

  6. 告别 DeepSeek 系统繁忙,七个 DeepSeek 曲线救国平替入口,官网崩溃也能用!

    前言 DeepSeek作为一款备受瞩目的国产大模型,以其强大的功能和卓越的性能赢得了众多用户的青睐.然而,随着用户量的激增,DeepSeek官网近期频繁遭遇服务器繁忙甚至崩溃的问题,给广大用户带来了不 ...

  7. Paxos算法:如何解决分布式系统中的共识问题?

    背景 Paxos 算法是 Leslie Lamport(莱斯利·兰伯特)在 1990 年提出了一种分布式系统 共识 算法.这也是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节 ...

  8. 运行中的Docker容器获取 .NET项目的Dump文件

    进入容器的 shell docker exec -it 容器名称或 id /bin/bash 使用cd命令进入NETSDK所在文件夹 cd /usr/share/dotnet/shared/Micro ...

  9. babel-loader 如何工作? 什么是babel-loader插件? babel-loader插件可以干什么? 如何制作一个babel-loader插件?

    本文会介绍比较基本的编译知识和babel-loader运作原理 babel-loader 是什么? 作为老一派的打包工具, babel-loader 想必大家已经非常熟悉了.它长这样子 // webp ...

  10. 探秘Transformer系列之(4)--- 编码器 & 解码器

    探秘Transformer系列之(4)--- 编码器 & 解码器 0x00 摘要 对于机器翻译,Transformer完整的前向计算过程如下图所示(与总体架构那章的流程图相比较,此处重点突出了 ...