有没有办法在客户端与服务器上实现不同的类?
为了避免"为什么你想这样做?" 问题..我会详细说明
我正在转换一个非常大的Java客户端/服务器应用程序.目前它使用Swing GUI客户端并通过Spring远程处理(RPC)与服务器通信.使用GWT RPC和Spring服务不是问题,有几个很好的例子可供使用,而且一切似乎都运行良好.
客户端和服务器共有的几个类包含来回传递的数据.这些类还包含一些使用标准JRE类实现的行为.例如,一个类以特定于语言环境的方式包含,解析和格式化日期和时间,包括时区,DST等.我可以重写/重构它,但是应用程序超过1000万SLOC,因此只有数百万个引用这个类,所以重大改写不符合成本效益.
以此为例,GWT为解析和格式化日期提供了出色的i18n支持.但实施方式与JRE的实施方式不同.
所以我正在寻找一种切割方式,我可以将实现注入到我的DateTime类的shell中,具体取决于它是在客户端(使用GWT和本机JS)还是在服务器(使用JRE)中.有一种巧妙的方法吗?也许使用模块文件XXXXX.gwt.xml.我正在寻找通用的解决方案.
如您所知,您可以构建一个Silverlight XAP包并使用HTML页面或asp.net页面上的object标签引用它.
当用户第一次引用页面时,浏览器从服务器下载XAP包,如果用户刷新同一页面,是重新下载相同的XAP包还是使用缓存版本?
如果用户导航到使用相同XAP包的另一个页面,并且由于用户所在的上一页已经下载了XAP包,浏览器是否使用了缓存版本或转到服务器并再次下载?
如果浏览器一直使用缓存版本,它如何知道何时使用缓存版本以及何时使用新版本的XAP软件包,因为它可能已经使用新的更改进行了重建?是否与包的版本号有关?
下面是我用来设置服务器的代码:
require 'socket'
require 'openssl'
socket = TCPServer.new('127.0.0.1', 4433)
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("ssl/server/server.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("ssl/server/server.key"))
ca_cert = OpenSSL::X509::Certificate.new(File.open("ssl/ca/ca.crt"))
ssl_socket = OpenSSL::SSL::SSLServer.new(socket, ssl_context)
Thread.start(ssl_socket.accept) do |s|
puts "Connected to #{s.peeraddr.last}"
if s.peer_cert.verify(ca_cert.public_key)
puts "Certificate verified"
else
puts "Certificate invalid"
end
end
Run Code Online (Sandbox Code Playgroud)
和客户:
require 'socket'
require 'openssl'
socket = TCPSocket.new('127.0.0.1', 4433)
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("ssl/client1/client1.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("ssl/client1/client1.key"))
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ca_cert = OpenSSL::X509::Certificate.new(File.open("ssl/ca/ca.crt"))
ssl_socket.connect
if ssl_socket.peer_cert.verify(ca_cert.public_key)
puts "Certificate checks out"
else
puts "Certificate not verified" …Run Code Online (Sandbox Code Playgroud) 我正在使用websockets进行多人游戏,我需要在服务器上发送多种类型的数据,但是当我连接到服务器时,它应该分别发回一个名称和号码("类型")和("数据")来自连接上的websocket库.我不需要类型,但("数据")对于游戏逻辑实际工作至关重要.
下面是我的websockets onMessage()函数中的代码:
@Override
public void onMessage(String message)
{
try
{
JSONObject json = new JSONObject(message);
if(json.has("type") && json.has("data"))
{
Log.d(TAG, json.getString("type"));
Log.d(TAG, json.getString("data"));
playerNum = Integer.parseInt(json.getString("data"));
Log.d(TAG,"Received... Type : " +json.getString("type")+" Data : "+json.getString("data"));
}
if(json.has("Player1TurnOver"))
{
player1TurnOver = json.getBoolean("Player1TurnOver");
}
if(json.has("Word"))
{
String b = json.getString("Word");
bWord = new char[b.length()];
for(int i = 0; i < b.length(); i++)
{
bWord[i] = b.charAt(i);
}
wordLength = bWord.length;
}
}
catch(JSONException e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使客户端有一个监听器,也不会从服务器调用它:
mClient = new WebSocketClient(URI.create("ws://some_ip:8080/wstest"), …Run Code Online (Sandbox Code Playgroud) 我想使用我的覆盆子pi作为SIP/VOIP-Phone,只需通过SSH控制RPI.
我找到了一些教程,看起来Twinkle是最有用的应用程序之一.
所以我成功地在我的RPI上安装了闪烁,在我的Android-Phone上安装了一个SPI-Client,因为我知道我可以从一个到另一个发送短信.
问题是:我必须使用Twinkel GUI与X-Server转发(目前使用MacOS与X11和iTerm).
但我有点希望自动化整个过程,比如从命令行使用twinkle,用脚本控制它等.
因此,显然不是为此而闪烁的.(甚至没有account-config-file的文档,所以我不得不努力通过x11-forwarding-stuff)
所以,我的最后一个问题是:是否可以通过CLI控制RPI的可比SIP客户端?
任何提示都受到高度赞赏.在谷歌搜索这个问题时,我刚刚发现项目在RPI上使用asterisk-server或将显示附加到它 - 但那不是我想要的......
欢呼和谢谢
tl; dr:有人可以解释在这两个平台之间实现客户端Google登录流程的不同之处究竟是什么?
背景故事:
我一直在努力实现客户端Google登录我的网站.首先,我使用标签实施了全球设置的Google+平台,因此可以监控用户会话.得到的信息:https://developers.google.com/+/web/signin/
但是,我遇到了一个问题,如果用户没有登录,网站将自动检查用户登录状态,这导致许多'toastr'消息'Logged out',我在signInCallback函数中实现.这真令人生气.
所以我做了一些研究,偶然发现了他们的"快速启动应用程序"并浏览了它.它比指南更复杂,许多元素都记录在Google Identity Platform上,在这里:https: //developers.google.com/identity/sign-in/web/reference
现在我真的不明白实现他们的登录的正确方法是什么 - 它是轻量级的Google+按钮,带有用户状态的标签回调检查,还是与监听器,gapi实例等所有的强大的GIP方式?这些平台有何不同之处?
我正在尝试在卸载窗口时(即刷新页面时)向数据库发送一些请求.出于某种原因,仅在Safari上,客户端代码被执行,但对服务器的请求永远不会通过.当我在调试器中手动单步执行代码时,服务器确实获得了请求并处理它.
任何人都知道为什么会这样吗?
window.onbeforeunload = function() {
console.log("inside on before unload");
var requestParam = new a.ListRequest();
requestParam.setAction('set_delete');
var callback = function(isSuccess, response) {
if (isSuccess) {
//do something
} else {
// do something else
}
};
// Sends request to server
a.Fetch.list(requestParam, callback);
}Run Code Online (Sandbox Code Playgroud)
我正在尝试使用nusoap实现一个简单的Web服务.服务器:
<?php
require_once "nusoaplib/nusoap.php";
class food {
public function getFood($type) {
switch ($type) {
case 'starter':
return 'Soup';
break;
case 'Main':
return 'Curry';
break;
case 'Desert':
return 'Ice Cream';
break;
default:
break;
}
}
}
$server = new soap_server();
$server->configureWSDL("foodservice", "urn:foodservice");
$server->register("food.getFood",
array("type" => "xsd:string"),
array("return" => "xsd:string"),
"urn:foodservice",
"urn:foodservice#getFood",
"rpc",
"encoded",
"Get food by type");
@$server->service($HTTP_RAW_POST_DATA);
?>
Run Code Online (Sandbox Code Playgroud)
客户:
<?php
require_once "nusoaplib/nusoap.php";
$client = new nusoap_client("http://localhost/SOAPServer.php?wsdl", true);
$error = $client->getError();
if ($error) {
echo "<h2>Constructor error</h2><pre>" . $error . "</pre>"; …Run Code Online (Sandbox Code Playgroud) 我下载了即时Oracle客户端版本11.2.0.4.0( ,,basic 的.rpm文件)由甲骨文网站在Ubuntu.转换成使用后,我安装了它,第一个也是最后一个.sqlplusdevel.rpm.debalienbasicsqlplusdevel
然后我试着运行sqlplus.
但它说 sqlplus64: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
即使我PATH包含了PATH.
下面显示了我PATH和的位置libsqlplus.so.
A@ubuntu:~$ sudo find / -name libsqlplus.so
/usr/lib/oracle/11.2/client64/lib/libsqlplus.so
A@ubuntu:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/sangmin/eclipse:/usr/lib/oracle/11.2/client64/lib:/usr/lib/oracle/11.2/client64
Run Code Online (Sandbox Code Playgroud) client ×10
javascript ×2
andengine ×1
android ×1
browser ×1
caching ×1
certificate ×1
flash ×1
google-plus ×1
gwt ×1
java ×1
nusoap ×1
oracle11g ×1
php ×1
python ×1
raspberry-pi ×1
rpc ×1
rtmp ×1
ruby ×1
safari ×1
server ×1
silverlight ×1
sip ×1
soap ×1
ssl ×1
ubuntu-12.04 ×1
voip ×1
web ×1
websocket ×1
wsdl ×1
xap ×1