关键词:
【中文标题】使用 ws4py 创建自己的应用程序【英文标题】:creating own application using ws4py 【发布时间】:2013-05-25 09:54:49 【问题描述】:我使用 ws4py 创建了一个 web 服务器套接字,它使用了 cherrypy。当我使用ip:port
连接到服务器时,它可以完美连接并且能够通过多个浏览器聊天。但是,当我尝试连接ip:port/ws
时,它也可以工作。
但是,在我不使用ws
进行连接后,我无法握手。我想处理来自客户端浏览器的所有请求,或者它可能来自不同来源的另一个请求,例如通过此 url ip:port/app
使用 c# 并从客户端发送有效负载。
我已经通过这个命令sudo pip install ws4py
安装了ws4py,我的服务器脚本是:
# -*- coding: utf-8 -*-
import argparse
import random
import os
import cherrypy
from ws4py.server.cherrypyserver import WebSocketPlugin, WebSocketTool
from ws4py.websocket import WebSocket
from ws4py.messaging import TextMessage
class ChatWebSocketHandler(WebSocket):
def received_message(self, m):
print "Message Received---------------------1"
print m
cherrypy.engine.publish('websocket-broadcast', m)
def closed(self, code, reason="A client left the room without a proper explanation."):
print "Socket Closed---------------------2"
cherrypy.engine.publish('websocket-broadcast', TextMessage(reason))
class Root(object):
def __init__(self, host, port, ssl=False):
print "Rooot host "+str(host)+ " Port "+str(port)+ " -----------3"
self.host = host
self.port = port
self.scheme = 'wss' if ssl else 'ws'
@cherrypy.expose
def index(self):
return """<html>
<head>
<script type='application/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>
<script type='application/javascript'>
$(document).ready(function()
websocket = '%(scheme)s://%(host)s:%(port)s/ws';
if (window.WebSocket)
ws = new WebSocket(websocket);
else if (window.MozWebSocket)
ws = MozWebSocket(websocket);
else
console.log('WebSocket Not Supported');
return;
window.onbeforeunload = function(e)
$('#chat').val($('#chat').val() + 'Bye bye...\\n');
ws.close(1000, '%(username)s left the room');
if(!e) e = window.event;
e.stopPropagation();
e.preventDefault();
;
ws.onmessage = function (evt)
$('#chat').val($('#chat').val() + evt.data + '\\n');
;
ws.onopen = function()
ws.send("%(username)s entered the room");
;
ws.onclose = function(evt)
$('#chat').val($('#chat').val() + 'Connection closed by server: ' + evt.code + ' \"' + evt.reason + '\"\\n');
;
$('#send').click(function()
console.log($('#message').val());
ws.send('%(username)s: ' + $('#message').val());
$('#message').val("");
return false;
);
);
</script>
</head>
<body>
<form action='#' id='chatform' method='get'>
<textarea id='chat' cols='35' rows='10'></textarea>
<br />
<label for='message'>%(username)s: </label><input type='text' id='message' />
<input id='send' type='submit' value='Send' />
</form>
HI ****************************************************************************
</body>
</html>
""" % 'username': "User%d" % random.randint(0, 100), 'host': self.host, 'port': self.port, 'scheme': self.scheme
@cherrypy.expose
def ws(self):
print ("request for ws------------------------------------------------------4")
cherrypy.log("Handler created: %s" % repr(cherrypy.request.ws_handler))
@cherrypy.expose
def App(self):
print ("request for App---------------------------------------------5")
cherrypy.log("Handler created: %s" % repr(cherrypy.request.ws_handler))
if __name__ == '__main__':
import logging
from ws4py import configure_logger
configure_logger(level=logging.DEBUG)
print " Start Main ----------------------------------------------0"
parser = argparse.ArgumentParser(description='Echo CherryPy Server')
parser.add_argument('--host', default='192.x.x.x')
parser.add_argument('-p', '--port', default=yyyy, type=int)
parser.add_argument('--ssl', action='store_true')
args = parser.parse_args()
cherrypy.config.update('server.socket_host': args.host,
'server.socket_port': args.port,
'tools.staticdir.root': os.path.abspath(os.path.join(os.path.dirname(__file__), 'static')))
if args.ssl:
cherrypy.config.update('server.ssl_certificate': './server.crt',
'server.ssl_private_key': './server.key')
WebSocketPlugin(cherrypy.engine).subscribe()
cherrypy.tools.websocket = WebSocketTool()
cherrypy.quickstart(Root(args.host, args.port, args.ssl), '', config=
'/ws':
'tools.websocket.on': True,
'tools.websocket.handler_cls': ChatWebSocketHandler
,
'/js':
'tools.staticdir.on': True,
'tools.staticdir.dir': 'js'
)
【问题讨论】:
Hai meawoppl 我很高兴你纠正了我的语法如果你解决了我的问题我会更开心 【参考方案1】:你能准确地说出你的意思吗:
但是,在我使用 ws 连接 whithot 后,我无法握手。
你的意思是你以后就不能使用服务器了吗?另外,您只能在此处对 /ws 路径执行 websocket 升级,因为这是您在 sn-p 底部配置它的方式。
【讨论】:
Hai @Sylvain Hellegouarch 感谢您的回复我已经使用 gevent 完成了使用自己的内容创建动态选项卡
...问题描述】:我正在尝试创建一个动态创建不同选项卡的应用程序,其中有一个根据变量过滤的初始表版本(在CheckboxGroupInput选择的所有选项中)。例如,如果我尝试使用表iris,其中有一个变量Species采用3种模式virginita,setosa和... 查看详情
Laravel 使用 Socialite(google、facebook 等)登录并创建我自己的应用程序的访问令牌
...Laravel使用Socialite(google、facebook等)登录并创建我自己的应用程序的访问令牌【英文标题】:LaravelloginwithSocialite(google,facebook,etc)andcreateanaccesstokenofmyownapp【发布时间】:2019-06-0318:36:50【问题描述】:我正在使用Laravel社交身份验... 查看详情
使用我自己的控件使用 MFC 创建一个 DialogBar
...。我实际上正在开发一个项目,并且正在尝试创建一个SDI应用程序。对,现在我想添加一个可停靠的DialogBar。好吧,我第一次使用资源视图添加它时,我可以毫无 查看详情
ExtJS:如何使用其他 ExtJS 组件创建自己的类?
...用不同的项目创建Panel类对象。基本上它与ExtJS中的桌面应用程序有关。DetailView.jsExt.define("App.view.DetailView",extend:\'Ext.p 查看详情
我使用firebase以角度创建应用程序,如何让每个用户拥有自己的任务表[关闭]
】我使用firebase以角度创建应用程序,如何让每个用户拥有自己的任务表[关闭]【英文标题】:Icreatedapplicationinangularusingfirebase,howtomakepossibleforeachusertohavetheirowntablewithtasks[closed]【发布时间】:2021-02-0200:00:39【问题描述】:我需要... 查看详情
如何使用 java 创建我自己的 STUN 或 TURN 服务器
...用WebRTC并使用JavaWebsocket作为信令服务器来开发视频聊天应用程序。此应用程序在Tomcat上成功运行。目前我正在使用谷歌的STUN服务器。varpc_config="iceServers":["ur 查看详情
创建属于自己的浏览器
...供了托管包装,托管包装使用户可以在Windows窗体客户端应用程序中显示网页,使用WebBrowser控件,可以复制用用程序中的InternetExplorerWeb浏览功能,还可以禁用默认的InternetExplorer功能,并将该控件用做简单的HTML文档查看器,此外... 查看详情
Xcode:仅为我自己的应用程序创建自定义键盘
】Xcode:仅为我自己的应用程序创建自定义键盘【英文标题】:Xcode:Creatingacustomkeyboardjustformyownapp【发布时间】:2015-02-2210:19:55【问题描述】:我正在开发一个数学应用程序。所以我需要一个特定的键盘。我只能使用小数点,但... 查看详情
C# 创建自己的流程图
...述】:在一个项目中,我可能必须创建一个提供流程图的应用程序(.Net/C#4.0)。我正在寻找最好的方法,因为我知道它应该非常灵活:我必须自己使用.Net框架图形(WPF、xaml)吗?是否有一个强大的库可供我使用,专门用于流程图... 查看详情
ios:创建自己的视图
...间】:2011-03-1416:24:50【问题描述】:我才刚刚开始开发iOS应用程序。所以我猜这个问题会是nooby..我正在尝试了解mvc模型在iOS开发中的工作原理。我想混合可用的视图和我自己的视图(我想使用诸如绘制字符串之类的图元自己绘... 查看详情
让用户创建自己的类实例
...建自己的记录。解决这个问题的最佳方法是什么?我可以使用数组或向量作为变量名吗?intRecU[100];classRecord...;intmain()RecordRecU[1];我试过了,我的程序崩溃了,所以我不确定它是否可能 查看详情
跟踪从我自己的类创建的对象
...2018-11-0613:41:37【问题描述】:我有一个扩展eclipse产品的应用程序。让它超时运行,RAM使用量增加到最大堆空间。应用程序不执行任何操作,它只是停留在后台。我运行了JProfiler,然后在LiveMemory部分中,我通过按下Markcurrent按钮... 查看详情
使用 Autodesk A360 中的 URN 创建查看器应用程序
】使用AutodeskA360中的URN创建查看器应用程序【英文标题】:CreatingaviewerapplicationwithanURNfromAutodeskA360【发布时间】:2016-10-1613:16:56【问题描述】:我创建了一个查看器应用程序,它使用2-legged身份验证并显示已上传到我自己的存储... 查看详情
创建自己的 pod 时没有这样的模块“Firebase”
...个名为Experiments的新框架。它为我可以使用它构建的任何应用程序包装FirebaseRemoteConfigAPI。当我运行以下命令podliblintExperiments.podspec时,我得到 查看详情
图解使用idea创建第一个java程序helloworld
...做好了,我们就要开始我们真正的编码学习了。下面介绍使用IDEA创建我们的第一个HelloWorld程序。 1、打开IDEA,创建一个新的项目。 2、在弹出的对话框中,选择Java,第一次使用的时候,要选择我们之前下载好的JDK文件。... 查看详情
创建我自己的 MySQL 数据库 [关闭]
...:是否有任何程序可以让我创建自己的MySQL数据库,最好使用phpmyadmin。这让我可以从外部连接到数据库,并让我编辑它。就像从java中一样,使用JDBC。我已经尝试过wamp,但我似乎无法使用java连接到它。这真是太糟糕了。如果可... 查看详情
Android - 使用我自己的数据使用 parse.com 制作聊天应用程序
】Android-使用我自己的数据使用parse.com制作聊天应用程序【英文标题】:Android-MakeChatapplicationusingparse.comusingmyowndata【发布时间】:2015-12-1209:11:48【问题描述】:我对Android开发非常陌生,对Parse.com也非常陌生。我正在开发一个包... 查看详情
如何创建自己的 npm starter-kit?
...its,例如React带有starter-kit。当用户想要创建一个新的React应用程序时,他们可以使用简写npxcreate-react-appmy-app....自 查看详情