socket与rpc的区别

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。

不同服务器的玩家,由于数据不在同一个进程里,所以无法直接交互。跨服设计的目标,就是将不在同一个游戏进程的玩家拉到同一个服务器进程。

跨服玩法的技术本质其实是跨进程通信。服务器A跟服务器B进行数据交换。java常用的进程间通信有http,rpc,webservice,消息队列等等。

而跨服游戏设计最常用的是采用RPC以及原生socket通信。本文主要来讲述这两种方式的通信方式的区别。

rpc跨服通信

RPC(远程过程调用),简单来说,就是一个进程A向另外一个进程B请求服务。进程A调用进程B的服务,就好像在调用自己进程的服务方法一样,无需关心内部的实现细节。RPC的使用demo如下面所示:

@RpcService(name = "HelloService")
public class HelloServiceImpl implements HelloService {@Override@RpcInvokerpublic String sayHi(String request) {return "hi," + request;}}

客户端只需要引用HelloService接口,其实现HelloServiceImpl由服务端提供实现。客户端可以直接以调用本地服务接口的方式调用服务提供者的功能。

rpc的优缺点

优点:

  • 简单易用:RPC隐藏了底层通信细节,使用起来简单方便。
  • 提高效率:RPC可以将远程调用过程封装成一个接口,并通过一定的序列化和反序列化机制将数据进行传输,减少通信开销,提高效率。
  • 提高可维护性:RPC将远程服务封装成接口,可以提高代码的可维护性和可拓展性。
  • 跨语言支持:RPC协议通常是跨语言的,可以实现不同语言之间的通信和调用。

缺点:

  • 依赖网络:RPC需要依赖网络进行通信,网络不稳定或延迟会影响调用效率和可靠性。
  • 难以跟踪问题:由于RPC调用是在不同的进程上进行的,一旦出现问题,调试和跟踪问题会比在本地调用困难。
  • 安全性:RPC通信可能会存在安全隐患,需要额外的安全机制来确保通信的安全性。
  • 版本兼容性:当服务端接口发生变化时,客户端需要做相应的升级或兼容处理,增加了开发和维护的难度。

总体来说:

RPC在简化开发、提高效率、可维护性和跨语言支持方面具有明显优势,但同时也存在配置复杂、依赖网络、难以调试和安全性等缺点。在使用RPC时,需要根据具体需求和情况进行权衡和选择。

socket通信

rpc专注于面型服务,而socket则是面向底层传输通信。类似于http的请求——响应模式,客户端发送一个请求消息给服务器,服务器处理之后给予一个响应消息。

socket的优缺点

优点:

  • 简单易用:Socket编程提供了一种简单而直接的方式来实现网络通信,使得开发者可以自有地创建客户端和服务器端进行通信。
  • 灵活性:Socket提供了底层的网络通信接口,允许开发者自定义通信协议和数据格式,从而可以满足各种不同的需求。
  • 跨平台性:由于Socket是基于TCP/IP协议的,因此可以在不同的操作系统和平台上进行通信,具有较好的跨平台性。
  • 实时性:Socket通信可以实现实时性要求较高的应用,如在线游戏、实时聊天等。

缺点:

  • 复杂性:在Socket编程中,开发者需要处理网络通信的各种细节,包括连接管理、数据传输、数据编解码,数据粘包拆包、异常处理等,相对比较复杂。
  • 性能:Socket通信的性能受到网络环境和负载的影响,可能出现延迟或带宽受限的情况,影响通信效率。
  • 安全性:Socket通信的安全性相对较低,需要额外的加密和认证机制来确保通信的安全性。

总体来说:

Socket在实现网络通信时具有简单易用、灵活性、跨平台性和实时性的优点,但同时也存在复杂性、性能、安全性和编程复杂度等缺点。在使用Socket时,需要根据具体的需求和情况进行权衡和选择。

特别是对于游戏开发来说,需要比较下两者的优缺点

游戏业务选择观点

socket与rpc对比
socketrpc
使用方式服务端收到客户端请求包后返回响应包客户端面向服务接口,使用简单
传输细节双方需要关注数据的传输过程

无须关心底层通信

同步调用客户端调用过程,可以同步调用,亦可异步调用客户端同步调用,会阻塞当前线程

笔者认为:说到底,rpc只是在通信传输的上层封装了服务而已,其底层主要是socket。当然,也有底层使用http的实现,例如Hession。游戏服务器使用socket来接受所有客户端的请求,本身有一个非常完善的跨进程通信框架。而不同服务器节点的跨服通信,本质跟客户端与服务器的通信一样的,所以无须再引入第三方rpc框架。而且基于socket的通信,可以实现类似于rpc的请求——响应模式,也可以实现异步的消息回调。参考以下接口

public class RpcMessageClient {/*** 以消息回调的方式请求数据* 发送方无须阻塞当前线程*/public static void callBack(IdSession session, Traceable request,         RequestCallback callBack) throws CallbackTimeoutException {}/*** 以请求——响应的方式请求数据* 发送方必须阻塞当前线程*/public static Object request(IdSession session, Traceable request) throws CallbackTimeoutException {}}

具体代码可参考笔者的游戏服务器开源框架

jforgame游戏服务器开源框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享…

【实战 JS逆向+python模拟获取+Redis token会话更新】实战模拟测试 某巴批发网 仅供学习

逆向日期:2024.02.20 使用工具:Node.js、python、Redis 加密方法:md5标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标…

day07-实战-今日指数

今日指数-day07 1.股票Code联想推荐 1.1 股票Code联想推荐功能介绍 1) 原型效果 输入框输入股票编码后,显示关联的股票信息; 2)接口定义说明 接口说明: 功能描述:根据输入的个股代码,进行模糊查询,返…

Python学习-流程图、分支与循环(branch and loop)

十、流程图 1、流程图(Flowchart) 流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来。 好处: 1)代码的指导文档 2)有助…

【Python】OpenCV-实时眼睛疲劳检测与提醒

实时眼睛疲劳检测与提醒 1. 引言 眼睛疲劳对于长时间使用电子设备的人群来说是一个常见的问题。为了帮助用户及时发现眼睛疲劳并采取相应的措施,本文介绍了一个实时眼睛疲劳检测与提醒系统的简单实现。使用了OpenCV、MediaPipe以及Playsound库,通过摄像…

云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

docker (十一)-进阶篇-docker-compos最佳实践部署zabbix

一 部署docker环境 关闭防火墙、selinux、开启docker,并设置开机自启动 注意点:docker部署的时候,bip要指定,不然会导致虚拟机ip和容器ip冲突,ssh连不上虚拟机 部署请参考 docker (二)-yum…

OpenHarmony下GN语法普法

OpenHarmony下GN语法普法 引言 前面一直在折腾怎么移植,怎么编写,尼玛忘了搞最基本的GN语法了。这不必须给安排上! 一.GN表达式语言和GN作用域 GN 是简单的动态类型的命令式语言,其最终目的只是产生声明性的 Ninja 规则。一切都…

【python】windowslinux系统python的安装

一、python官网及下载路径 官网地址:Welcome to Python.org 下载路径:Download Python | Python.org ​​​​​​​ linux源码安装包下载: windows二进制安装包下载: 二、Linux如何安装python 2.1 单版本安装 以安装python…

Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的异或和

Problem - 15C - Codeforces 目录 Nim游戏: 1~n的异或和: 代码: Nim游戏: n个石头堆,谁最后没得取谁败 我用的异或思考法,对所有堆异或。开局异或和为0的败 最后全是0,异或完也是0. //最…

芋道----如何在自己的业务模块中添加导入导出功能

导出不再多做介绍&#xff0c;代码自动生成就会有&#xff0c;这里介绍一下如何实现导入&#xff1a; 一、首先介绍前台&#xff1a; 1&#xff09;页面上添加导入按钮 <el-buttontype"primary"plainicon"el-icon-download"size"mini"click…

DDI中的自适应子结构

SA-DDI提出了一种子结构感知图神经网络&#xff0c;一种配备了子结构注意力机制和用于DDI预测的子结构-子结构交互模块&#xff08;SSIM&#xff09;的消息传递神经网络。具体而言&#xff0c;基于分子中官能团的尺寸和形状通常是不规则的化学直觉&#xff0c;子结构注意力被设…

线阵相机之帧超时

1 帧超时的效果 在帧超时时间内相机若未采集完一张图像所需的行数&#xff0c;则相机会直接完成这张图像的采集&#xff0c;并自动将缺失行数补黑出图&#xff0c;机制有以下几种选择&#xff1a; 1. 丢弃整张补黑的图像 2. 保留补黑部分出图 3.丢弃补黑部分出图

USACO 2024年2月铜组 PALINDROME GAME(博弈)

第一题&#xff1a;PALINDROME GAME 标签&#xff1a;思维、博弈 题意&#xff1a;给定一堆石子&#xff0c;有 S S S个&#xff08; 1 ≤ S ≤ 1 0 1 0 15 1≤S≤10^{10^{15}} 1≤S≤101015&#xff09;&#xff0c; B e s s i e Bessie Bessie和 E l s i e Elsie Elsie轮流…

混子文章|蓝桥杯一题 -平方差

题目考点: 平方差 ,平方差奇偶关系 代码 #include<bits/stdc.h> #define Run 0 #define endl "\n" #define N 100005 using unl __int128_t; using ll long long; using namespace std; class Solution { public: void slove() {int sum 0;int L, R; cin &…

内存计算研究进展-针对机器学习的近数据计算架构

针对机器学习的近数据计算架构代表性工作有&#xff1a; Georgia Institute of Technology的BSSync (bounded staled sync) 和 Neurocube&#xff0c;Advanced Micro Devices 的 CoML&#xff0c;具体如下。 1 BSSync BSSync指出&#xff0c;在并行实现的机器学习应用中&#…

马斯洛激励理论

马斯洛激励理论——摘抄 马斯洛理论&#xff0c;也被称为马斯洛需求层次理论&#xff0c;是由美国心理学家亚伯拉罕马斯洛在1943年提出的。它是一种心理学中的激励理论&#xff0c;描绘了人类需求的五级模型&#xff0c;通常被描绘成金字塔内的等级。 从层次结构的底部向上&am…

代码随想录算法训练营DAY21 | 二叉树 (9)

一、LeetCode 669 修建二叉搜索树 题目链接&#xff1a;669.修建二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 思路&#xff1a;递归三部曲-定参数、返回值-定终止条件-定单层递归逻辑 class Solution {public TreeNode trimBST(TreeNode …

Sora了解资料

一、基本介绍 1.1sora 在 2024 年 2 月 16 日&#xff0c;Open AI 宣布推出全新的生成式人工智能模型“Sora”。据了解&#xff0c;通过文本指令&#xff0c;Sora 可以直接输出长达 60 秒的视频&#xff0c;并且包含高度细致的背景、复杂的多角度镜头&#xff0c;以及富有情感…

Prometheus+TDengine集群实现监控体系高可用

背景 为避免再次出现因Prometheus宕机导致业务无法查看历史数据受到影响&#xff0c;准备将Prometheus架构从单节点方式升级为高可用集群方式并将后端存储由本地存储改为远端分布式时序数据库存储。分布式时序数据库采用国产数据库TDengine。 架构 解释&#xff1a;虚线代表P…