您的位置:首页 > 理论基础 > 计算机网络

Python&Flash开发斗兽棋---2.网络基础

2012-04-30 22:21 423 查看
既然是网络对战,首先要解决的是网络通信问题。

我的服务器端用的是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包

5.ez_setup.py

在安装zope支持包时需要使用到

参考资料:

用python来开发webgame服务端(1)

用python来开发webgame服务端(2)

用python来开发webgame服务端(3)

用python来开发webgame服务端(4)

用python来开发webgame服务端(5) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息