前一章客户端与服务端连接成功,现在需要前后端进行数据传递。

一、前端发送消息。在项目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初识(六) --- 客户端与服务端消息传递的更多相关文章

  1. Photon Server初识(五) --- 客户端连接服务端

    准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...

  2. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

  3. react+redux教程(六)redux服务端渲染流程

    今天,我们要讲解的是react+redux服务端渲染.个人认为,react击败angular的真正“杀手锏”就是服务端渲染.我们为什么要实现服务端渲染,主要是为了SEO. 例子 例子仍然是官方的计数器 ...

  4. [Java]Hessian客户端和服务端代码例子

    简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...

  5. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  6. 用PHP的socket实现客户端到服务端的通信

    服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...

  7. Java实现UDP之Echo客户端和服务端

    Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...

  8. Java实现TCP之Echo客户端和服务端

    Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...

  9. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

随机推荐

  1. Fltiss项目的架构、包名的定义和类的划分

    这是项目的一览 首先Web根目录. 除了WEB-INF以外,还有css,img,js,lib目录,这四者都是静态资源. 由于客户端无法访问WEB-INF下的内容,所以将它们放置在了Web根目录下. 而 ...

  2. Smali基础知识

    Smali是用于Dalvik(Android虚拟机)的反汇编程序实现 汇编工具(将Smali代码汇编为dex文件)为smali.jar baksmali.jar则是反汇编程序 地址:https://b ...

  3. Prometheus HA详解

    Prometheus 横向扩展 当Exporter或者采集信息需要越来越多时就会考虑高可用,高可用优点不会因为集群中某个节点down而导致Prometheus不可用,可以让算力下沉; 缺点是A-Pro ...

  4. 关于在eclipse中Undefined attribute name (role).解决办法

    方案一: 只需要在jsp表头添加一句: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...

  5. selenium 配置 chromedriver

    参考文档: https://blog.csdn.net/yoyocat915/article/details/80580066?tdsourcetag=s_pcqq_aiomsg http://npm ...

  6. 设置django 时间

    使用Django的DateTimeField(auro_now_add=True)设置当前时间为创建时间时,时间往往与当前时间对应不上,这是由于Django默认使用的是[UTC](世界标准时间)时区, ...

  7. oracle数据库使用PL/sql导入excel数据

    1.打开PL/SQL工具,菜单进入   工具>ODBC导入器(菜单列表倒数第二): 2.连接数据库与选择导入的excel文件表: 3.选择导入的表以及excel与数据库表字段之间的对应关系:

  8. jemter 90%line的解释

    假如: 有10个数: 1.2.3.4.5.6.7.8.9.10    按由大到小将其排列. 求它的第90%百分位,也就是第9个数刚好是9 ,那么他的90%Line 就是9 . 另一组数: 2.2.1. ...

  9. selenium历史版本下载

    python历史版本下载 https://pypi.org/project/selenium/#history java历史版本下载  http://selenium-release.storage. ...

  10. Python描述性统计numpy

    import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasets, ...