我将在JavaScript中编写自己的STUN实现(带有NodeJS的服务器端),我正在寻找一个基于我的代码的库.
我找到了JSTUN和PJNATH,两者似乎都受到stackoverflow成员的支持.我下载了两者的源代码,PJNATH大约有15,000行代码,而JSTUN小于3000.
一个图书馆比另一个图书馆更完整吗?
我需要服务器和客户端组件,我希望尽可能完整,因为我不想实现TURN(太硬件密集).
我应该看一下更好的图书馆吗?最终我想制作一个完全符合ICE标准的解决方案,但现在STUN已经足够了.
我正在 Windows 中编写一个批处理文件来运行安装后脚本,需要做的一件事是在系统路径中添加一个目录。
该脚本正在运行,它执行以下操作:
setx Path "%PATH%;c:\path\to\add" -m
这是正确设置路径,但如果用户重新安装程序,此脚本可能会多次运行。
我想搜索字符串,c:\path\to\add所以我不会一遍又一遍地向系统路径添加相同的路径。这在带有 的 Linux 中非常简单sed,但我不知道 Windows 中的命令是什么。我找到了findstr,但这似乎只适用于文件。
在不安装额外软件的情况下,这在 Windows 中是可能的吗?
编辑:
我正在使用 Inno Setup 创建安装可执行文件。
我构建了一个用于压缩HTTP输出的模块.阅读规范,我没有找到一些明确的区别:
Accept-Encoding:
是否应将其视为一个Accept-Encoding: *或好像没有标题?
或者,如果我不支持gzip,但我得到这样的标题:
Accept-Encoding: gzip
我应该返回406错误还是只返回未编码的数据?
编辑:
我已经阅读了几次规范.它提到了我的第一个案例,但没有定义服务器的行为应该是什么.
我应该像处理标题一样对待这种情况吗?或者我应该返回406错误,因为在给定字段值(''不是有效编码)的情况下无法对某些内容进行编码.
可能重复:微小的JavaScript实现?
我一直在寻找Javascript的C实现,但我找不到一个.我需要这个可以在没有C++编译器的平台上运行的超便携应用程序.
这是我的要求:
我不关心速度,但正确性是一个问题.我更喜欢它支持ECMAScript-262 v5,但v3现在还不错.
这样的事情存在吗?如果没有,是否有任何实现端口相对简单?
DMDScript是我发现的最简单的,所以我最终可能会移植它.显然没有参考实现,所以这可能是最好的方法.
注意:
我还发现了tiny-js,它意味着小而简单,但似乎并不符合标准.它似乎正在积极开发......
我正在尝试做类似于提出此问题的用户尝试执行的操作:
关于用户配置文件的组件,我发现了这一点.
我的目标是Windows 7(专业版或企业版).我不仅仅是一个Linux人,所以在Windows上进行编程时我很无能为力,所以请保持温和.
PS有没有办法可以在Linux上开始开发,然后在不使用VM的情况下在Windows上进行测试?
我正在构建一个配置文件同步程序,供那些移动很多的人使用,这样他们就不必到处携带笔记本电脑.此问题解决了用户登录到新计算机的情况.可能的应用是:
我希望尽可能提供最好的用户体验,这意味着近乎即时的配置文件创建.漫游配置文件很慢并且充满了错误.让Windows创建一个配置文件实际上不是一个选项,因为我需要进行自定义身份验证(我想出这个),我需要从服务器复制设置.
我需要的是一种方法:
这就是我在想的事情:
这是我的脚本的简单版本,显示失败:
#!/bin/bash
${something:="false"}
${something_else:="blahblah"}
${name:="file.ext"}
echo ${something}
echo ${something_else}
echo ${name}
Run Code Online (Sandbox Code Playgroud)
当我回显变量时,我得到了我输入的值,但它也会发出错误.我究竟做错了什么?
输出:
./test.sh: line 3: blahblah: command not found
./test.sh: line 4: file.ext: command not found
false
blahblah
file.ext
Run Code Online (Sandbox Code Playgroud)
前两行被发送到stderr,而接下来的三行被输出到stdout.
我的平台是fedora 15,bash版本4.2.10.
我想使用commons-fileupload-1.2.2将doc文件上传到servlet.
我在前端使用此代码:
<form action="fileuploader" method="post" enctype="multipart/form-data">
<br>File : <input type="file" name="uploadedFile">
<br><input type="submit">
Run Code Online (Sandbox Code Playgroud)
并在servlet中使用此代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
}
Run Code Online (Sandbox Code Playgroud)
但系统给了我一个错误
SEVERE: Servlet.service() for servlet FileUploaderServlet threw exception
java.lang.ClassNotFoundException: org.apache.commons.fileupload.servlet.ServletFileUpload
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.jspFileUploader.fileUploader.FileUploaderServlet.doPost(FileUploaderServlet.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
我认为问题在于这一行: …
我已经和NodeJS玩了一段时间了,我真的很喜欢它,但我已经把自己弄到墙上了......
我正在尝试创建一个连接模块来拦截http.ServerResponse方法.我的最终目标是允许用户对传出数据应用某种过滤器.例如,他们可以选择在数据输出之前应用压缩等.
我有这个奇怪的错误...这个方法被调用的次数是它应该的两倍.
这是我的代码:
var http = require('http'), orig;
orig = http.ServerResponse.prototype.write;
function newWrite (chunk) {
console.log("Called");
orig.call(this, chunk);
}
http.ServerResponse.prototype.write = newWrite;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write("Hello");
res.write(" World");
res.end();
console.log("Done");
}).listen(12345);
Run Code Online (Sandbox Code Playgroud)
这有效,当我使用浏览器访问它时,我得到'Hello World'作为输出,但我得到4'被调用'到控制台,'完成'得到输出两次.这让我相信,由于某种原因,我的服务器代码被调用了两次.我在this.constructor上的newWrite方法中做了一个console.log,两个实例中的构造函数都是ServerResponse,所以这没什么用.
我真的很困惑这里发生了什么.什么可能会发生?这不会直接影响输出,但我可能会同时向许多客户端提供数十亿字节的压缩数据,并且两次执行任务都会给我的服务器带来不必要的压力.
这将成为更大的文件服务器的一部分,因此强调不做两次所有事情.
编辑:
我已经读过这个问题,以防你想知道:
我正在设计一个游戏,但这个问题适用于需要群集中的节点和主服务器之间的双向通信的任何情况.我对集群很陌生,但我积极参与Go计划,偶尔在D计划.
我真的想使用现代语言(而不是C/C++),所以我选择了这两种语言,因为:
我已经阅读了/sf/ask/248846951/和 用于游戏开发的D编程语言.
在高级别,我的游戏将完成大部分处理服务器端,客户端只是从他们的角度呈现游戏状态.游戏旨在扩展,因此它需要在群集中运行.组件主要是CPU绑定的,并且异步更新到主服务器,它与客户端共享游戏状态.大多数计算取决于用户输入,因此需要将这些事件发送到单个组件(因此是双向RPC).
我喜欢D的原因:
我喜欢Go的原因:
客户端可能会用D编写,但这不应该对服务器产生影响.
我倾向于D,因为手动内存管理已融入语言.虽然它没有很好的RPC库,但我理论上可以实现它,但我不能优雅地在Go中实现手动内存管理.
鉴于两种语言之间的选择,您会针对此问题使用哪种方法?
我或多或少偶然发现了这种形式的范围
DataSource *dataSource =({
NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
DataSource *dataSource = [DataSource new];
dataSource.address = self.destinations[idx][0];
dataSource.name = self.destinations[idx][1];
dataSource;
});
Run Code Online (Sandbox Code Playgroud)
我认为这是一种创建和实例化对象和变量的好方法,因为临时变量只有在需要创建我真正需要和关心的对象时才会存在.在idx我将内部写入dataSource外部时dataSource,上面的代码将会消失,因为范围将很快被留下.
此外,我发现一个吸引人的事实是完全实例化和配置的对象将被设置为外部对象.
实际上我甚至不知道这是C或Objective-C功能还是添加到clang的语法糖果.
@Unheilig
这是组织代码的语法.它不像块或闭包.在代码的末尾,您只需要一个完全实例化和配置的对象.
如果您只需要一个对象将它作为参数传递给方法,这会派上用场,但该对象的配置需要多个语句.您可以传入语句表达式,而不是将其分配给本地临时变量.
[[MYViewController alloc] initWithDataSource:({
NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
DataSource *dataSource = [DataSource new];
dataSource.address = self.destinations[idx][@"address"];
dataSource.name = self.destinations[idx][@"name"];
dataSource;
})];
Run Code Online (Sandbox Code Playgroud)
在非ARC环境中,您甚至可以在表达式语句中调用autorelease.
所以它只是关于代码组织和我猜的很多个人品味.
c ×2
javascript ×2
node.js ×2
windows ×2
bash ×1
batch-file ×1
clang ×1
connect ×1
d ×1
encoding ×1
file-upload ×1
go ×1
http ×1
http-headers ×1
ice ×1
inno-setup ×1
interpreter ×1
jsp ×1
objective-c ×1
path ×1
rpc ×1
servlets ×1
stream ×1
stun ×1
user-profile ×1
windows-7 ×1
winlogon ×1