用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. 节点和IP节点和IP

    先说一下我们的IP分配和服务的规划信息 节点和IP 节点 IP ha01 11.53.103.50 ha02 11.53.103.49 ha03 11.53.103.48 ha04 11.53.103 ...

  2. Jdk8新特性目录总结

    --------------------------------------- Lambda表达式 接口新增方法 四大函数式接口 方法引用 Stream(1) Stream(2) Stream(3) ...

  3. biancheng-Spring Cloud Alibaba Nacos

    参考http://c.biancheng.net/springcloud/what-is-alibaba.html http://c.biancheng.net/springcloud/nacos.h ...

  4. java代码之美(2)

    guava 复写Object常用方法 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方 ...

  5. 自定义快捷命令程序(VC++加批处理)

    一 概述 在看<从小工到专家-程序员修炼之道>时,看到建议使用Shell,很有感触.在很多时候,通过键盘操作,比鼠标的确会块很多,如果能用好shell命令(或批处理命令)   ,的确能节省 ...

  6. 接口的应用:代理模式(Proxy)

    应用场景: 安全代理:屏蔽对真实角色的直接访问. 远程代理:通过代理类处理远程方法调用(RMI) 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象比如你要开发一个大文档查看软件,大文档中 ...

  7. Readys pg walkthrough Intermediate

    nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.175.166 Starting Nmap 7.94SVN ( https://nmap.org ) a ...

  8. ffmpeg简易播放器(4)--使用SDL播放音频

    SDL(英语:Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发函数库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码 ...

  9. flutter如何搭建android环境

    1.电脑上按安装sdk 首先配置Java的JDK 配好后,输入java 出现内容说明安装成功 然后在输入javac 出现内容说明jre安装成功 2.电脑上安装android Studio 安卓下载地址 ...

  10. dart集合list方法详解

    List数组有两种声明方式: 01==>List 常用的属性==> length 计算数组的长度 reversed 数组翻转 isEmpty 是否为空 isNotEmpty 是否不为空 L ...