既然是网络对战,首先要解决的是网络通信问题。
我的服务器端用的是Python+nginx,客户端用的是Flash。游戏素材方面的资源通过HTTP,从nginx服务器加载。游戏逻辑控制采用原生态的SOCKET连接,Flash与Python之间通信。
前者没什么好说的,关键在后者。
Python作为服务器端,我使用了一个叫做Twisted的第三方Python库(下载地址:http://pypi.python.org/pypi/Twisted/)。顺便得说一下,Twisted依赖pywin32和zop库(下载地址:http://pypi.python.org/pypi/zope.interface)。
zop安装方法如下
1:先下载并运行一个叫做ez_setup.py的脚本,这个脚本会自动到网上下载相关的安装程序,提示完成后,会在python安装目录的的scripts文件下生成几个exe可执行文件。
2:将zope.interface-3.8.0-py2.7-win-amd64.egg放到{python安装目录}\Scripts下
3:开始->运行->CMD
C:\>cd Python26\Scripts
C:\Python26\Scripts>easy_install.exe zope.interface-3.6.4-py2.6-win32.egg
安装完毕。
然后我们简单测试一下
from twisted.internet import reactor
接下来写一最简单的个socket的服务器:
import os
if os.name!='nt':
from twisted.internet import epollreactor
epollreactor.install()
else:
from twisted.internet import iocpreactor
iocpreactor.install()
from twisted.internet.protocol import Factory,Protocol
from twisted.internet import reactor
class gameSocket(Protocol):
#有新用户连接至服务器
def connectionMade(self):
print 'New Client'
#客户端断开连接
def connectionLost(self,reason):
print 'Lost Client'
#收到客户端发送数据
def dataReceived(self, data):
print 'Get data:' + str(data)
#向该客户端发送数据
self.transport.write('your msg:'+ str(data))
if __name__=='__main__':
f = Factory()
f.protocol = gameSocket
reactor.listenTCP(5200,f)
print 'server started...'
reactor.run()
Fash客户端代码
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.Socket;
import flash.utils.ByteArray;
public class PythonFlashSocket extends Sprite
{
private var m_Socket:Socket;
public function PythonFlashSocket()
{
m_Socket = new Socket();
m_Socket.addEventListener(Event.CONNECT, onSocketConnect);
m_Socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketReceived);
m_Socket.connect("127.0.0.1", 5200);
}
private function onSocketConnect(e:Event):void
{
this.m_Socket.writeUTFBytes("I'm Flash");
}
private function onSocketReceived(e:ProgressEvent):void
{
trace(this.m_Socket.readUTFBytes(m_Socket.bytesAvailable));
}
}
}
我们需要准备几个工具:
1.python-2.7.2.amd64.msi
Python 2.7,可以从Python官网下载到
2.pywin32-217.win-amd64-py2.7.exe
Python 2.7Windows开发环境
3.Twisted-12.0.0.win-amd64-py2.7.exe
Python网络编程第三方库,很好用
4.zope.interface-3.8.0-py2.7-win-amd64.egg
Twisted依赖zope包
在安装zope支持包时需要使用到
参考资料: