热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将连接客户端的历史记录保存到Web服务jax-ws-keephistoryofconnectedclientstoaweb-servicejax-ws

IhaveamultiplayergameandIwanttokeephistoryofconnectedplayerstounderstandwhenshould

I have a multi player game and I want to keep history of connected players to understand when should game start . I used HttpSession But it can't solve my problem. also I created a static ArrayList of players in webservices but it couldn't solve my poblem . :( Any other idea ?

我有一个多人游戏,我想保持连接玩家的历史,以了解游戏什么时候开始。我使用了HttpSession但它无法解决我的问题。我也在webservices中创建了一个静态的ArrayList,但它无法解决我的问题。 :(任何其他想法?

     @Resource
    private WebServiceContext wsContext;    
   @WebMethod
    public PlayerModel connect(String PlayerName) {
        PlayerModel playerModel = null;
        Players players = new Players() ;
        ArrayList playerList = players.getPlayers();

        if (playerList.isEmpty()) {
            System.out.println("from service :No payer yet");
             boardModel = new BoardModel(6, 7);
            session.setAttribute("boardModel", boardModel);



            boardModel.setPlayer1(PlayerName);
            playerModel = new PlayerModel(1, PlayerName, boardModel);
            playerList.add(playerModel) ;
        } else if (playerList.size() == 1) {
            boardModel.setPlayer2(PlayerName);
            playerModel = new PlayerModel(2, PlayerName, boardModel);
          playerList.add(playerModel) ;
        }
        return playerModel;

    }

another approach

 @Resource
 private WebServiceContext wsContext;   
 BoardModel boardModel;
 HttpSession session;

@WebMethod
public PlayerModel connect(String PlayerName) {
    MessageContext mc = wsContext.getMessageContext();
    session = ((HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST)).getSession();

    if (session == null) {
        System.out.println("from service :No payer yet");
         boardModel = new BoardModel(6, 7);
         session.setAttribute("boardModel", boardModel);
        boardModel.setPlayer1(PlayerName);
        playerModel = new PlayerModel(1, PlayerName, boardModel);
       session.setAttribute("1", playerModel);
    } else if (session.getAttribute("1" != null) {
        boardModel.setPlayer2(PlayerName);
        playerModel = new PlayerModel(2, PlayerName, boardModel);
        session.setAttribute("2", playerModel);
    }
    System.out.println("from service  : player" + PlayerName);
    return playerModel;

}

1 个解决方案

#1


0  

Your code doesn't seem to add up in multiple places.

您的代码似乎没有在多个地方加起来。

  1. Your first code block, apart from missing important bits, couldn't possibly work across multiple requests.

    除了缺少重要位之外,您的第一个代码块不可能跨多个请求工作。

    • playerList looks like it'll almost always be empty
    • playerList看起来几乎总是空的

  2. A session-aware JAX-WS service by itself wouldn't help you. The session, by definition is relating to a single user. Without extra legwork on your part, there's no way for one user's webservice session to be shared across multiple users

    会话感知的JAX-WS服务本身对您没有帮助。根据定义,会话与单个用户有关。如果您没有额外的腿部工作,则无法在多个用户之间共享一个用户的Web服务会话


The one glaring gap in your code is that you're not identifying an instance of the game. When a player requests to connect, they should be requesting to either connect to an existing game or to create one, by passing a gameId. Without a token identifying a specific game, you'll struggle to connect multiple users to the same game. connect should have the (overly simplistic) signature connect(String gameId, String playerName). A list of gameIds can be managed by a DAO, outside of the context of the webservice endpoint. This way, returning players or new players can make their presence known by presenting a known gameId, and you can keep track of connected users to a specific gameId

代码中的一个明显缺口是您没有识别游戏的实例。当玩家请求连接时,他们应该通过传递gameId来请求连接到现有游戏或创建游戏。如果没有识别特定游戏的令牌,您将很难将多个用户连接到同一个游戏。 connect应该具有(过于简单化)签名连接(String gameId,String playerName)。在Web服务端点的上下文之外,DAO可以管理gameIds列表。这样,返回的玩家或新玩家可以通过呈现已知的gameId来表达他们的存在,并且您可以跟踪连接的用户到特定的gameId


推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
author-avatar
955单车小宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有