title: 为什么php，jsp很少用于游戏服务端的开发？
desc: 我最近想了一下，大部分的游戏服务端框架都是用cC嵌入python或者lua，Java，Golang等实现的。为什么很少用php，jsp来实现的。<br><br>比如一个怪物攻击的部分，游戏服务端用C实现或者用嵌入的脚本语言实现或者用Java，Golang实现。<br>下面是伪代码<br>如果 怪物看到玩家距离gt30米处<br> 不攻击，继续巡逻<br> 如果 怪物看到玩家距离lt30米处<br> 准备发动攻击，追击玩家<br>如果 怪物看到玩家距离lt5米处<br> 对玩家发动攻击<br><br>我想了想用php或者jsp等页面脚本同样也可以实现类似等等游戏服务端的功能，为什么游戏很少用呢？<br><br>记得看过一篇访谈游戏开发团队的新闻，开发者谈到，当时他们也是用php实现了游戏服务端的功能，但是运行后发现性能不行，所以把游戏服务端换成用C来实现。我搜索了一下相关问题，有人回答说，项目用什么语言，取决于开发成员对语言的熟悉度，哪种语言熟悉用哪种。游戏服务端的语言选择也是这样。（对于这个回答，我表示怀疑。）<br><br>有人回答是因为长连接短连接的问题造成的。<br>有朋友回答：<br><br>为什么PHP和C在online game中在通讯层面会共存这两种语言？<br><br>这个问题的根本在于，实际业务的要求，比如以下两种应用场景：<br><br>用户登录用户验证用户充值接口（尤其是充值接口，更多的是类似支付宝这种平台对己方API的调用），这种场景用web语言更加合适<br>需要Socket长连接的业务场景，比如聊天同屏战斗组队副本等，这些场景试用编译型语言更加合适<br><br>我搜索了一下长连接和短连接的知识<br>Socket长连接和短连接的区别是<br>短连接的操作步骤是：<br>建立连接数据传输关闭连接...建立连接数据传输关闭连接<br>长连接的操作步骤是：<br>建立连接数据传输...（保持连接）...数据传输关闭连接<br><br>短连接多用于操作频繁，点对点的通讯，而且连接数不能太多的情况。<br>每个TCP连接的建立都需要三次握手，每个TCP连接的断开要四次握手。<br>如果每次操作都要建立连接然后再操作的话处理速度会降低，所以每次操作后，下次操作时直接发送数据就可以了，不用再建立TCP连接。例如：数据库的连接用长连接，如果用短连接频繁的通信会造成socket错误，频繁的socket创建也是对资源的浪费。<br>短连接：web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接，而且同时用成千上万的用户，每个用户都占有一个连接的话，可想而知服务器的压力有多大。所以并发量大，但是每个用户又不需频繁操作的情况下需要短连接。总之：长连接和短连接的选择要根据需求而定。<br><br>我的理解是<br>在游戏场景中，游戏客户端和游戏服务端长时间存在着大量频繁的数据交换，所以需要socket长连接，保证数据不断的传输。而如果是用php，jsp实现游戏服务端，php本质是用c socket实现的http协议，在这个运行环境下运行的php 脚本语言。而jsp是用java socket实现的http协议，在这个运行环境下运行jsp语言。http是短连接，每次客户端收到服务端的数据就会断开。如果是用在游戏场景中，游戏客户端和游戏服务端长时间存在着大量频繁的数据交换，在这种情况下，http短连接每次收到数据就要断开，然后下次得到数据又要重新连接在一起，这种断开再次连接需要耗费大量的时间和cpu 内存资源导致了 http协议很少用于游戏服务端的开发，或者说是php，jsp很少用于游戏服务端的开发，是因为这些页面技术用的是socket短连接，不胜任游戏频繁的数据交换的要求。<br><br>问题1：<br>总结下来，想问问，到底是“项目用什么语言，取决于开发成员对语言的熟悉度，哪种语言熟悉用哪种。游戏服务端的语言选择也是这样。”还是“长连接和短连接在长时间游戏客户端和游戏服务端频繁交换数据上的优劣导致”还是其他原因导致php，jsp很少用于游戏服务端的开发？<br><br>问题2：<br>在游戏场景中，游戏客户端和游戏服务端长时间存在着大量频繁的数据交换。是因为socket短连接得到数据之后，关闭下次要数据，又要重新连接，导致在这种情况下，socket 长连接比socket短连接性能更好吗？<br>在这应用场景下，频繁断开重新连接是导致socket短连接不如socket长连接性能的主要原因吗？而这个原因是造成上述提到的游戏团队因为php在游戏服务端性能不佳，在游戏服务端换成c来实现的原因吗？
topic: 游戏开发
content: 题主需要 明确几个概念： 1： php 是脚本语言 和c，c不是一个语言层次， 其运行在 对应的脚本语言解释器上面 2：游戏服务端 包含很多东西，语言只是一部分 结论：采用什么技术和你开发的游戏类型有很大关系。社交游戏： 首先有很多网页 以及 社交游戏是用 web 开发技术开发的， 例如爬 墙看这个： httpwww.slideshare.netwoogaredis-to-the-rescue 这个公司分享了很多 社交游戏开发的技术。这类web技术就是 php ， ruby on rails， http等技术的。棋牌：
answerer_tags: 程序员