Photon Server初识(六) --- 客户端与服务端消息传递
前一章客户端与服务端连接成功,现在需要前后端进行数据传递。
一、前端发送消息。在项目Scripts目录中新建脚本 TestSer.cs。并挂载到相机上
二、客户端发送数据给服务端。编辑客户端代码 TestSer.cs。让鼠标点击时发送消息
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class TestSer : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{ } // Update is called once per frame
void Update()
{
//如果鼠标点击了
if (Input.GetMouseButtonDown())
{
SendRequest();
}
} void SendRequest()
{
Debug.Log("点击了------"); //包装需要发送的数据
Dictionary<byte, object> data = new Dictionary<byte, object>();
data.Add(, );
data.Add(, "clent to ser"); //向服务端发送数据,发送code是1,服务端需要用到
PhotonManager.Peer.OpCustom(, data, true);
}
}
三、服务端接收数据,并返回数据给客户端。编辑服务端代码 ClientPeer.cs。
using System.Collections.Generic;
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces; namespace MyGameServer
{ public class ClientPeer : Photon.SocketServer.ClientPeer
{
//创建客户端
public ClientPeer(InitRequest initRequest) : base(initRequest)
{
} protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
MyGameServer.log.Info("Client---请求了---" + operationRequest.OperationCode); //通过opCode区分
switch (operationRequest.OperationCode)
{
//客户端测试数据发送的code是1,所以在1里面接收数据
case :
//接收客户端传来的数据
Dictionary<byte, object> data = operationRequest.Parameters;
object intValue;
data.TryGetValue(, out intValue);
object strValue;
data.TryGetValue(, out strValue); MyGameServer.log.Info("Client---客户端传的数据--" + intValue.ToString() + "---" + strValue.ToString()); //服务端返回数据给前端
//包装数据,发送代码为 1,前端取数据需要用到
OperationResponse opResult = new OperationResponse(); Dictionary<byte, object> datav2 = new Dictionary<byte, object>();
datav2.Add(, );
datav2.Add(, "server to Client"); opResult.SetParameters(datav2); MyGameServer.log.Info("Client---返回数据给客户端了---");
SendOperationResponse(opResult, sendParameters); //发送数据给前端 break;
case :
break;
default:
break;
}
} //处理客户端断开连接
protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
{
MyGameServer.log.Info("Client------断开了");
}
}
}
四、客户端接收服务端响应的数据。编辑客户端代码 PhotonManager.cs.
/// <summary>
/// 客户端请求后,服务端响应,返回数据
/// </summary>
/// <param name="operationResponse"></param>
public void OnOperationResponse(OperationResponse operationResponse)
{
Debug.Log("Client----收到服务端返回的数据了" + operationResponse.OperationCode); switch (operationResponse.OperationCode)
{
//服务端返回的数据code是1,所以在1中接收服务端数据
case :
object intval;
object strVal; Dictionary<byte, object> data = operationResponse.Parameters; data.TryGetValue(, out intval);
data.TryGetValue(, out strVal); Debug.Log("Client--收到服务端返回的数据" + intval.ToString() + "-- " + strVal.ToString()); break;
case :
break;
default:
break;
}
}
五、测试。查看结果。
服务端日志:
到此,前端和后端相互通信就完成了。另外客户端不需要向服务端请求,服务端可以自动向客户端发送数据。
六、服务端主动发送数据(服务端主动推送到客户端)。
(1)、添加服务端代码
//Envent自动发起信息
Dictionary<byte, object> datav3 = new Dictionary<byte, object>();
datav3.Add(, "DeDeDe");
datav3.Add(, "server to Client"); EventData ed = new EventData(); //发送code是2
ed.Parameters = datav3;
SendEvent(ed, new SendParameters()); //自动发送数据给前端
为了方便测试,将这段代码放到服务端 ClientPeer.cs 文件中。在 OnOperationRequest() 方法中添加。
(2)、客户端接收数据 。客户端脚本 PhotoManager.cs 中方法 OnEvent() 接收服务端主动推过来的数据。
/// <summary>
/// 服务端直接给客户端数据时,不需要向服务器请求
/// </summary>
/// <param name="eventData"></param>
public void OnEvent(EventData eventData)
{
switch (eventData.Code)
{
case :
break;
case :
//服务端发送的code是2
Dictionary<byte, object> data = eventData.Parameters; object intval;
object strVal; data.TryGetValue(, out intval);
data.TryGetValue(, out strVal); Debug.Log("Client--收到服务端返回的数据" + intval.ToString() + "-- " + strVal.ToString()); break;
default:
break;
;
}
}
前后端相互传递数据以及服务端主动推送数据到此完成。
参考文档:https://doc.photonengine.com/zh-tw/server/current/app-framework/an-app-from-scratch
参考视频:https://www.bilibili.com/video/av35109390/?p=46
Photon Server初识(六) --- 客户端与服务端消息传递的更多相关文章
- Photon Server初识(五) --- 客户端连接服务端
准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
- react+redux教程(六)redux服务端渲染流程
今天,我们要讲解的是react+redux服务端渲染.个人认为,react击败angular的真正“杀手锏”就是服务端渲染.我们为什么要实现服务端渲染,主要是为了SEO. 例子 例子仍然是官方的计数器 ...
- [Java]Hessian客户端和服务端代码例子
简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...
- SignalR 实现web浏览器客户端与服务端的推送功能
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...
- 用PHP的socket实现客户端到服务端的通信
服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...
- Java实现UDP之Echo客户端和服务端
Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- Java实现TCP之Echo客户端和服务端
Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- socket 通信 入门3 android 客户端 C# 服务端
这是一个android端操控服务器的例子 就是发送简单指令到服务器 然后服务器响应什么的... 当然这里是未完成的 只是简单展示一下大致思路 首先连接建立起来后 服务端给客户端一条信息 告诉 ...
随机推荐
- luogu2885
P2885 [USACO07NOV]电话线Telephone Wire 给出若干棵树的高度,你可以进行一种操作:把某棵树增高h,花费为h*h. 操作完成后连线,两棵树间花费为高度差*定值c. 求两种花 ...
- 第11组 Alpha事后诸葛亮
第11组 Alpha事后诸葛亮 组长博客链接 https://www.cnblogs.com/xxylac/p/11924846.html 设想和目标 我们的软件要解决什么问题?是否定义得很清楚? ...
- Spring Security整合JWT,实现单点登录,So Easy~!
前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况 ...
- sed中使用变量及变量中存在特殊字符‘/’处理
sed中使用变量,普通的处理方式无法解析变量 如当前file文件中存在字符串pedis,现将其替换为redis [root@localhost work]# cat file pedis 如下两种替换 ...
- VUE数组操作方法的局限
1.不能通过索引值直接设置一个项: vm.items[indexOfItem] = newValue 但是可以用set方法设置: Vue.set(example1.items,indexOfItem, ...
- Facebook币Libra学习-1.核心概念
Libra区块链是一个基于Libra协议的加密认证的分布式数据库.本文将简略介绍Libra协议的核心概念.其详细说明请参阅Libra技术白皮书. Libra区块链由分布式的Validator节点网络维 ...
- git撤销某次提交
1.查询提交记录.进入目录,查看某人在此目录下的commit: panxi@ww-bj-panxi MINGW64 [path]/Business (feature/v2.3) $ git log f ...
- XGBoost原理详解
原文:https://blog.csdn.net/qq_22238533/article/details/79477547
- .Netcore 2.0 Ocelot Api网关教程(9)- QoS
本文介绍Ocelot中的QoS(Quality of Service),其使用了Polly对超时等请求下游失败等情况进行熔断. 1.添加Nuget包 添加 Ocelot.Provider.Polly ...
- socket之IO多路复用
概述 目的:同一个线程同时处理多个IO请求. 本文以python的select模块来实现socket编程中一个server同时处理多个client请求的问题. web框架tornado就是以此实现多客 ...