草庐IT

同步Socket

全部标签

java - 同步客户端-服务器游戏状态

我正在制作客户端服务器MMO风格的游戏。到目前为止,我已经设置了框架,以便服务器和客户端相互交互以提供状态更新。服务器维护游戏状态并定期计算下一个状态,然后每隔一段时间(每n毫秒)将新状态发送给所有客户端。用户可以在客户端查看此新状态并使用react。然后将这些操作发送回服务器进行处理并发送出去进行下一次更新。明显的问题是这些更新在服务器和客户端之间传输需要时间。如果客户端开始攻击敌人,当更新返回到服务器时,服务器很可能已经将游戏状态推进到敌人不再在同一地点并且超出范围的程度。为了解决这个问题,我一直在努力想出一个好的解决方案。我看过以下内容,它对一些人有所帮助,但并不完全:Mutli

java - 使用具有返回值的同步方法包装一系列异步调用

我当前的代码使用一系列最终产生结果的异步过程。我需要以一种同步方法访问每个方法并将结果作为返回值的方式包装它们中的每一个。我想使用执行器服务来执行此操作,以允许其中许多同时发生。我感觉Future可能与我的实现相关,但我想不出实现这一目标的好方法。我现在拥有的:publicclassDoAJob{ResultObjectresult;publicvoidstepOne(){//PassesselfinforacallbackotherComponent.doStepOne(this);}//CalledbackbyotherComponentonceithascompleteddoSt

java - 有条件地定义同步块(synchronized block)

假设我有一个方法:publicvoidrun(){synchronized(this.foo){}}但有时当我运行这个方法时,我不需要同步任何东西。什么是有条件地同步某些东西的好模式?我能想到的唯一模式是回调,像这样:publicvoidconditionalSync(Runnabler){if(bar){r.run();return;}synchronized(this.foo){r.run();}}publicvoidrun(){this.conditionalSync(()->{});}还有没有回调的其他方法吗? 最佳答案 也

java - 如何使用 Java 检测同步冲突

我想知道有什么好的方法可以对同步或其他东西进行断言,以便我可以检测同步违规(在测试时)。例如,如果我有一个不是线程安全的类并且也不会是线程安全的,那将用于这种情况。如果从多个线程调用它的某些方法,我会有一些断言会通知我(日志或其他东西)。我渴望可以为AWT调度线程制作类似的东西:publicstaticvoidcheckDispatchThread(){if(!SwingUtilities.isEventDispatchThread()){thrownewRuntimeException("GUIchangemadeoutsideAWTdispatchthread");}}我只想要更通

java - 从 native 代码访问 java 同步方法

我有一个java类,它有一些(私有(private)静态)同步方法,我也想从native代码调用这些方法。通过一些示例代码,我的意思变得更加清楚publicclassSomeClass{privatestaticsynchronizedvoidmethod(){//dosomethingthatneedssynchronization}}和相关的native代码(C++)voidsomeFunction(JNIEnv*env){jclasssomeClass=env->findClass("SomeClass");jmethodIDmethodId=env->GetStaticMeth

java - 更好的解决方案而不是 Java 中的嵌套同步块(synchronized block)?

我有一个Bank类,其中包含一个Account列表。银行有一个transfer()方法可以将一个账户的值转移到另一个账户。这个想法是在转账中同时锁定from和to帐户。为了解决这个问题,我有以下代码(请记住这是一个非常简单的例子,因为它只是一个例子):publicclassAccount{privateintmBalance;publicAccount(){mBalance=0;}publicvoidwithdraw(intvalue){mBalance-=value;}publicvoiddeposit(intvalue){mBalance+=value;}}publicclassB

C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现

前言我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监测客户端已经与服务器断开连接的方法,并介绍三种方法分别适用于哪种业务场景。1、通过发送来检测如果客户端经常需要发送数据给服务器,并且服务器的程序不是由我们来编写,那么我们可以通过发送的结果来判断客户端和服务器是否已断开连接,主要是发送是是否会抛出异常,代码如下:privateboolSendData(){boolresult

【Obsidian】【Git】使用gitee同步/保存obsidian笔记

Obisidian是一款markdown软件,使用它可以方便地记笔记、记录科研日常。然而如果在多个设备上使用obsidian,会牵扯到笔记/vault/仓库同步问题。下面来介绍如何用git管理obsidian。1.创建gitee账号略2.下载Obsidian略3.新建git仓库3.1在gitee上新建仓库3.2链接本地仓库3.2.1在本地创建一个文件夹用于以后存放笔记3.2.2cd到这个文件夹里面3.2.3初始化本地仓库输入下面指令gitinit3.2.4用obsidian打开这个仓库(文件夹/vault)3.2.5链接本地仓库和远程仓库复制gitee仓库的ssh地址打开控制台,输入下面的命令

java - 如果不会发生争用,读取时是否需要同步

考虑下面的代码狙击手:packagesync;publicclassLockQuestion{privateStringmutable;publicsynchronizedvoidsetMutable(Stringmutable){this.mutable=mutable;}publicStringgetMutable(){returnmutable;}}在时间Time1线程Thread1将更新“可变”变量。setter中需要同步,以便将内存从本地缓存刷新到主内存。在时间Time2(Time2>Time1,无线程争用)线程Thread2将读取可变值。问题是——我需要把synchroni

实现mysql和es数据同步的两大工具——Logstash和Canal

 用途在大型实战项目开发过程中,当数据量达到比较大的规模时,不可避免的要考虑使用ElasticSearch(es)等搜索引擎来解决大量数据的查询性能压力,因此,做好mysql的数据同步变得至关重要。我所了解,并且使用的是通过Logstash和Canal中间件,来实现将数据写入到ES等中。一、实现同步原理1.1  LogstashLogstash提供了一个JDBC插件,它可以定期查询数据库并捕获变化。通过配置Logstash指定连接到mysql的哪个表和es的哪个索引库,并指定对应的查询语句。当MySQL中的数据发生变化时,Logstash的JDBC插件会定时的检测到这些变化,并且迅速捕获这些新